为什么我需要在java源文件中转义unicode?

时间:2012-06-27 13:04:11

标签: java unicode eclipse-rcp unicode-escapes

请注意,我不是在问为什么,而是为什么。而且我不知道它是否是RCP特定的问题,或者它是否是java固有的东西。

我的java源文件以UTF-8编码。

如果我像这样定义我的文字字符串:

    new Language("fr", "Français"),
    new Language("zh", "中文")

当我在Eclipse中使用字符串作为Eclipse应用程序启动它时,我的工作正如我所期望的那样:

enter image description here

但是当我启动由“Eclipse Product Export Wizard”构建的.exe时失败:

enter image description here

我使用的解决方案是逃避这样的字符:

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

执行此操作没有问题(我的所有其他字符串都在属性文件中,只有语言名称是硬编码的)但我想了解。

我认为编译器在构建the bytecode时必须转换java文字字符串。那么为什么unicode逃逸是必要的呢?在java源文件中使用高范围unicode字符是错误的吗?编译中的那些字符究竟发生了什么,以及与转义字符的处理有什么不同?该问题是否与RCP缓存有关?

2 个答案:

答案 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.Bu​​ild)忽略了IDE使用的文本编码。

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

javacDefaultEncoding.. =UTF-8