【问题标题】:Does Java 1.7 use a different character encoding?Java 1.7 是否使用不同的字符编码?
【发布时间】:2012-11-15 20:36:56
【问题描述】:

我们正在将我们的应用程序从 Java 1.6 迁移到 Java 1.7。我们使用 Java 1.7 重新编译了代码,并在编译时收到了一个错误,这是由于一个字符(Ó)造成的。

Java 1.7 中是否有与字符相关的变化?我们的应用程序对传入文件进行了大量处理,然后将它们加载到数据库中,我想确保当我们升级到 Java 1.7 时,从 java 读取文件并将该内容写入数据库不会导致一些奇数字符转换。

升级到 1.7 时我是否需要担心?如果是这样,我如何获得与 Java 1.6 相同的编码?

【问题讨论】:

  • 更多上下文会有所帮助。你究竟是如何编译的? javac?还是日食?究竟哪个角色很麻烦? Ó?究竟是哪个错误? Ä 等其他变音符号和“特殊”字符怎么样?源文件保存在什么字符编码中?这个问题几乎不会影响处理文件,只要您在任何地方明确提及字符编码而不是依赖平台默认值,例如通过使用InputStreamReaderOutputStreamWriter 而不是FileReaderFileWriter
  • 删除该字符并忘记。
  • @RomanC:请停止在建议的编辑中使用斜体 API/库/框架/产品名称。
  • 使用 javac 和 ant 编译(注意,如果有帮助,这是 Oracle 的 1.7)

标签: java


【解决方案1】:

发生错误是因为您已告知 Java 编译器您的源代码是 UTF-8 编码的,但它仍然包含一些 ISO-8859-1 扩展字符。我最近不得不修复从 1.5 迁移到 1.6 的代码库中的类似错误。我相信 Java 7 对 UTF-8 编码的要求比以前的版本要严格得多,并且会在以前默默接受不正确编码的地方发出错误。

您需要确保您的源代码是“Unicode-clean”的,也就是说,您必须将任何扩展的 ISO-8859-1 字符替换为其 Unicode 等效字符。

【讨论】:

    【解决方案2】:

    我在 Windows 上遇到了这个问题,发现 1.7 的默认编码是 CP-1252。通过设置以下环境变量,我能够获得干净的编译...

    JAVA_TOOL_OPTIONS = -Dfile.encoding=UTF8
    

    【讨论】:

      猜你喜欢
      • 2012-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      • 2014-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多