我想知道,为什么JSF属性文件不接受Eclipse中的非ASCII字符?
我有一些名为“messages.properties”的属性文件,我要用非ASCII字符编写unicode转义字符,例如:
title=\u01af\u0020\u0a3f0
header=\u0ff0\u0020\u0ab1
这意味着客户无法使用常规文本编辑器编辑这些属性文件。
有没有解决方案?
答案 0 :(得分:3)
这源于java.util.Properties.load(InputStream)
使用ISO-8859-1。
load(InputStream)/ store(OutputStream,String)方法与load(Reader)/ store(Writer,String)对的工作方式相同,但输入/输出流以ISO 8859-1字符编码进行编码。无法在此编码中直接表示的字符可以使用Unicode转义编写;在转义序列中只允许一个'u'字符。 native2ascii工具可用于将属性文件转换为其他字符编码或从其他字符编码转换。
这是一个长期存在的问题。我已经通过实现编码转换的自定义标签解决了struts,但这通常很痛苦。
Java 6引入了Properties.load(Writer)
,它适用于UTF-8,但它似乎尚未被广泛采用。
我建议使用AnyEdit tools转换为unicode表示法。
对于最终用户 - 如果他们要编辑属性文件(听起来很奇怪),那么你可以让他们用他们喜欢的任何字符写,然后使用native2acii(或它的包装)转换文件
答案 1 :(得分:1)
自Eclipse 4.2(Juno,2012)以来,这已不再适用。当您使用内置属性文件编辑器时,Eclipse将透明地处理这个问题。它将呈现并接受UTF-8中的值,但它将隐藏地转换为\uXXXX
格式。值得注意的是,这与Git插件结合有一些奇怪的副作用(例如在合并期间删除旧行),如果在拉/推之前关闭所有属性文件,则效果最佳。
如果您尚未使用Eclipse 4.x,请考虑使用JDK安装目录的native2ascii
文件夹中的/bin
工具将UTF-8属性文件转换为ASCII属性文件,如上所述在javadoc of java.util.Properties
class。
您可以保留“原始”属性文件(例如,为其提供.utf8
扩展名)并使用批处理/ shell文件将其转换为:
cd c:\path\to\properties\files c:\path\to\jdk\bin\native2ascii.exe -encoding UTF-8 text_cs.properties.utf8 text_cs.properties c:\path\to\jdk\bin\native2ascii.exe -encoding UTF-8 text_ja.properties.utf8 text_ja.properties c:\path\to\jdk\bin\native2ascii.exe -encoding UTF-8 text_zh.properties.utf8 text_zh.properties # You can add more properties files here.
通过这种方式,您只需编辑.utf8
文件并运行批处理/ shell脚本一次即可将本机字符转换为\uXXXX
。另请参阅this blog entry。
答案 2 :(得分:-2)
只需将.properties文件保存为UTF-8格式,它对我有用。