为什么JSF属性文件在Eclipse中不接受非ASCII字符?

为什么JSF属性文件在Eclipse中不接受非ASCII字符?,eclipse,jsf,utf-8,properties-file,Eclipse,Jsf,Utf 8,Properties File,我想知道,为什么JSF属性文件在Eclipse中不接受非ASCII字符 我有一些名为“messages.properties”的属性文件,我必须为非ASCII字符使用unicode转义字符,例如: title=\u01af\u0020\u0a3f0 header=\u0ff0\u0020\u0ab1 这意味着客户无法使用常规文本编辑器编辑这些属性文件 有什么解决办法吗?这源于使用ISO-8859-1的事实 load(InputStream)/store(OutputStream,String)

我想知道,为什么JSF属性文件在Eclipse中不接受非ASCII字符

我有一些名为“messages.properties”的属性文件,我必须为非ASCII字符使用unicode转义字符,例如:

title=\u01af\u0020\u0a3f0
header=\u0ff0\u0020\u0ab1
这意味着客户无法使用常规文本编辑器编辑这些属性文件


有什么解决办法吗?

这源于使用ISO-8859-1的事实

load(InputStream)/store(OutputStream,String)方法与load(Reader)/store(Writer,String)对的工作方式相同,只是输入/输出流采用ISO 8859-1字符编码。在这种编码中不能直接表示的字符可以使用Unicode转义码写入;转义序列中只允许一个“u”字符。native2ascii工具可用于在其他字符编码之间转换属性文件

这是一个长期存在的问题。我已经用struts解决了这个问题,实现了进行编码转换的自定义标记,但这通常是一个难题

Java6引入了
Properties.load(Writer)
,它可以与UTF-8配合使用,但它似乎还没有被广泛采用

我建议使用来转换unicode符号


对于最终用户来说,如果他们要编辑属性文件(听起来很奇怪),那么您可以让他们使用自己喜欢的任何字符编写,然后使用native2acii(或其包装器)转换文件。

自从Eclipse4.2(Juno,2012)以来,这不再是必需的。当您使用内置属性文件编辑器时,Eclipse将透明地处理这个问题。它将显示并接受UTF-8中的值,但它将在封面下以静默方式转换为
\uxxx
格式。值得注意的是,这与Git插件(例如,合并过程中删除的旧行)相结合会产生一些奇怪的副作用,最好在拉/推之前关闭所有属性文件

如果您不在Eclipse 4 .x,请考虑使用<代码> > Nase2ASCII < /C>工具在JDK安装目录的<代码> /bin <代码>文件夹中,将UTF-8属性文件转换为ASCII属性文件,如

中所描述的。 您可以保留“原始”属性文件(例如,为它们提供一个
.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. cd c:\path\to\properties\files c:\path\to\jdk\bin\native2ascii.exe-编码UTF-8 text\u cs.properties.utf8 text\u cs.properties c:\path\to\jdk\bin\native2ascii.exe-编码UTF-8 text_ja.properties.utf8 text_ja.properties c:\path\to\jdk\bin\native2ascii.exe-编码UTF-8 text_zh.properties.utf8 text_zh.properties #您可以在此处添加更多属性文件。 这样,您只需编辑
.utf8
文件并运行批处理/shell脚本一次,即可将本机字符转换为
\uxxx
。另见

另见:

只需将.properties文件保存为UTF-8格式,它对我很有用。

无论如何,我已经编写了转换为Unicode格式文本的简单程序,但我提出了这个问题,因为这对最终用户来说是一个非常大的问题!此外,JBoss工具包含一个插件,允许通过直接编写本地语言(如阿拉伯语、中文等)来修改属性文件。这是一个非常小的web应用程序,因此最终用户是一个非技术性部署者,之前会对属性/css文件进行一些更改deploying@BalusC,请你澄清一下。我读了一些关于这个问题的例子。如果原始属性文件不是utf-8格式,而是iso 8859-1编码格式(按照规范应该是这样的),该怎么办。此文件包含特殊字符,如“é”,它属于iso 8859-1()。为什么我仍然让mojibake whey尝试显示它(在网页中)。我从记事本打开.properties并保存为UTF-8,然后从Eclipse编辑它,然后它弹出一个警告,选择UTF-8,它就可以通过编译了。