为什么我需要在Java源文件中转义Unicode?

12
请注意,我问的不是如何,而是为什么。我不知道这是RCP特定的问题还是Java固有的问题。
我的Java源文件编码为UTF-8。
如果我像这样定义字面字符串:
    new Language("fr", "Français"),
    new Language("zh", "中文")

当我从Eclipse启动应用程序并在应用程序中使用该字符串时,它按照我的预期工作:

enter image description here

但是,当我启动由“Eclipse产品导出向导”构建的.exe文件时,它会失败:

enter image description here

我使用的解决方案是像这样转义字符:

    new Language("fr", "Fran\u00e7ais"), // Français
    new Language("zh", "\u4e2d\u6587") // 中文

这样做没有问题(我的其他字符串都在属性文件中,只有语言名称是硬编码的),但我想了解一下。
我认为编译器在构建字节码时必须转换Java文字字符串。那么为什么需要Unicode转义?在Java源文件中使用高范围的Unicode字符是错误的吗?这些字符在编译时会发生什么,与转义字符的处理有何不同?这个问题只是与RCP缓存相关吗?

10
看起来 Eclipse 产品导出向导没有将您的文件解释为 UTF-8。也许您需要使用设置为 UTF-8 的编码运行 Eclipse 的 JVM (eclipse.ini 中的 -Dfile.encoding=UTF8)? - Matt Ball
1
虽然这并不能真正解释为什么会发生这种情况,但它提供了一个替代解决方案,并表明出于某种原因,导出向导似乎没有正确地遵守项目的编码规范:https://dev59.com/E2w15IYBdhLWcg3wA28A - Jiddo
2
@Jiddo:它确实解释了为什么会发生这种情况:“不将您的文件解释为UTF-8”,因此它将它们解释为与UTF-8不兼容的另一种编码。 - m0skit0
1
@m0skit0 确实。我的意思是它没有解释为什么它不将您的文件解释为UTF-8,我理解这就是问题所在。对于造成的混淆我感到抱歉。 - Jiddo
1
@dystroy,抱歉我的插件环境不是RCP。看起来RCP向导没有这个选项。 - bruno conde
显示剩余9条评论
2个回答

10

看起来Eclipse产品导出向导没有将您的文件解释为UTF-8。也许您需要在Eclipse的JVM中设置编码为UTF-8(在eclipse.ini中使用-Dfile.encoding=UTF8)?

(根据OP要求复制)


4

导出插件时,会通过IDE内部的正常构建流程之外的一个独立过程来进行编译。PDE.Build的构建过程存在已知缺陷(链接),该缺陷忽略了IDE使用的文本编码。

您可以在插件的build.properties文件中指定文本编码,以使导出正常工作。

javacDefaultEncoding.. =UTF-8

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接