请注意,我不是在问为什么,而是为什么。而且我不知道它是否是RCP特定的问题,或者它是否是java固有的东西。
我的java源文件以UTF-8编码。
如果我像这样定义我的文字字符串:
new Language("fr", "Français"),
new Language("zh", "中文")
当我在Eclipse中使用字符串作为Eclipse应用程序启动它时,我的工作正如我所期望的那样:
但是当我启动由“Eclipse Product Export Wizard”构建的.exe时失败:
我使用的解决方案是逃避这样的字符:
new Language("fr", "Fran\u00e7ais"), // Français
new Language("zh", "\u4e2d\u6587") // 中文
执行此操作没有问题(我的所有其他字符串都在属性文件中,只有语言名称是硬编码的)但我想了解。
我认为编译器在构建the bytecode时必须转换java文字字符串。那么为什么unicode逃逸是必要的呢?在java源文件中使用高范围unicode字符是错误的吗?编译中的那些字符究竟发生了什么,以及与转义字符的处理有什么不同?该问题是否与RCP缓存有关?
答案 0 :(得分:10)
Eclipse Product Export Wizard似乎没有将您的文件解释为UTF-8。也许你需要运行Eclipse的JVM,编码设置为UTF-8(-Dfile.encoding=UTF8
中的eclipse.ini
)?
(在OPs请求下进行Copypasta)
答案 1 :(得分:3)
导出插件时,它会通过与IDE中的正常构建过程分开的进程进行编译。有一个known bug,构建过程(PDE.Build)忽略了IDE使用的文本编码。
通过在插件的build.properties文件中指定文本编码,可以使导出正常工作
javacDefaultEncoding.. =UTF-8