我想在消息资源包(属性)文件中写“阿拉伯语”,但是当我尝试保存它时,我收到此错误:
“保存无法完成 某些字符无法使用“ISO-85591-1”字符编码进行映射。更改编码或删除字符......“
有人可以指导吗?
我想写:
global.username =اسمالمستخدم
如何在属性文件中编写“username”的阿拉伯语?那么,国际化是有效的..
BR SC
答案 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,否则它可能不起作用。我花了很多时间才算出这个。
答案 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 Central或Github处找到该库,它是Maven工件,并带有源代码和Javadoc
这里是类StringUnicodeEncoderDecoder的javadoc