Java:如何在属性文件中写“阿拉伯语”?

时间:2011-01-10 15:42:12

标签: java properties struts2 resourcebundle

我想在消息资源包(属性)文件中写“阿拉伯语”,但是当我尝试保存它时,我收到此错误:

“保存无法完成 某些字符无法使用“ISO-85591-1”字符编码进行映射。更改编码或删除字符......“

有人可以指导吗?

我想写:

global.username =اسمالمستخدم

如何在属性文件中编写“username”的阿拉伯语?那么,国际化是有效的..

BR SC

7 个答案:

答案 0 :(得分:8)

http://sourceforge.net/projects/eclipse-rbe/

您可以使用上面的eclipse IDE插件为您进行Unicode转换。

答案 1 :(得分:5)

如“属性”的类引用中所述

  

load(Reader)/ store(Writer,String)方法从中加载和存储属性   基于字符的流,采用下面指定的简单的面向行的格式。   load(InputStream)/ store(OutputStream,String)方法的工作方式与    load(Reader)/ store(Writer,String)对,输入/输出流编码除外   ISO 8859-1字符编码。无法直接表示的字符   编码可以使用Unicode转义编写;只允许一个'u'字符   在逃脱序列中。 native2ascii工具可用于将属性文件转换为   以及其他字符编码。

答案 2 :(得分:4)

基于属性的资源包必须在ISO-8859-1中编码才能使用默认加载机制,但我已成功使用此代码来允许以UTF-8编码属性文件:

private static class ResourceControl extends ResourceBundle.Control {
    @Override
    public ResourceBundle newBundle(String baseName, Locale locale,
            String format, ClassLoader loader, boolean reload)
            throws IllegalAccessException, InstantiationException,
            IOException {
        String bundlename = toBundleName(baseName, locale);
        String resName = toResourceName(bundlename, "properties");
        InputStream stream = loader.getResourceAsStream(resName);
        return new PropertyResourceBundle(new InputStreamReader(stream,
                "UTF-8"));
    }

}

当然,您必须在IDE中将文件本身的编码更改为UTF-8,并且可以像这样使用它:

ResourceBundle bundle = ResourceBundle.getBundle(
    "package.Bundle", new ResourceControl());

答案 3 :(得分:1)

new String(ret.getBytes("ISO-8859-1"), "UTF-8");为我工作。 属性文件保存在ISO-8859-1编码中。

答案 4 :(得分:0)

如果您使用的是Eclipse,则可以选择“Window - > Preferences”,然后过滤“内容类型”。然后你应该能够设置默认编码。屏幕截图显示在this post的顶部。

答案 5 :(得分:0)

这主要是编辑器配置问题。如果您在Windows中工作,则可以在支持UTF-8的编辑器中编辑文本。只要您将文件保存为UTF-8,Notepad或Eclipse内置编辑器就足够了。在Linux中,我成功地使用了gedit和emacs。在记事本中,您可以通过单击“另存为”按钮并选择“UTF-8”编码来完成此操作。其他编辑应具有类似的功能。有些编辑可能需要更改字体才能正确显示字母,但似乎没有这个问题。

话虽如此,在为阿拉伯语执行i18n时还需要考虑其他步骤。您可以在下面找到一些有用的链接。确保在使用之前在属性文件上使用native2ascii,否则它可能不起作用。我花了很多时间才算出这个。

Tomcat webapps

Using nativ2ascii with properties files

答案 6 :(得分:0)

除了其他答案中提到的native2ascii工具外,还有一个Java开放源代码库,该库可提供要在代码中使用的转换功能

库MgntUtils有一个实用程序,可以将任何语言(包括特殊字符和表情符号)转换为unicode序列,反之亦然:

result = "Hello World";
result = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(result);
System.out.println(result);
result = StringUnicodeEncoderDecoder.decodeUnicodeSequenceToString(result);
System.out.println(result);

此代码的输出是:

\u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\u0064
Hello World

可以在Maven CentralGithub处找到该库,它是Maven工件,并带有源代码和Javadoc

这里是类StringUnicodeEncoderDecoder的javadoc