我想在消息资源包(属性)文件中写“阿拉伯语”,但是当我尝试保存它时,我收到了这个错误:
“无法完成保存某些字符无法使用“ISO-85591-1”字符编码进行映射。请更改编码或删除字符...”
有人可以指导吗?
我想写:
global.username = اسم المستخدم
我应该如何在属性文件中写“用户名”的阿拉伯语?所以,国际化工作..
BR SC
我想在消息资源包(属性)文件中写“阿拉伯语”,但是当我尝试保存它时,我收到了这个错误:
“无法完成保存某些字符无法使用“ISO-85591-1”字符编码进行映射。请更改编码或删除字符...”
有人可以指导吗?
我想写:
global.username = اسم المستخدم
我应该如何在属性文件中写“用户名”的阿拉伯语?所以,国际化工作..
BR SC
http://sourceforge.net/projects/eclipse-rbe/
您可以使用 Eclipse IDE 的上述插件为您进行 Unicode 转换。
如“属性”的类参考中所述
load(Reader) / store(Writer, String) 方法以下面指定的简单的面向行的格式从基于字符的流中加载和存储属性。load(InputStream) / store(OutputStream, String) 方法与 load(Reader)/store(Writer, String) 对的工作方式相同,除了输入/输出流采用 ISO 8859-1 字符编码进行编码。不能用这种编码直接表示的字符可以使用 Unicode 转义来编写;转义序列中只允许使用单个 'u' 字符。native2ascii 工具可用于将属性文件与其他字符编码进行转换。
基于属性的资源包必须以 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());
new String(ret.getBytes("ISO-8859-1"), "UTF-8");
为我工作。以 ISO-8859-1 编码保存的属性文件。
这主要是编辑器配置问题。如果您在 Windows 中工作,则可以在支持 UTF-8 的编辑器中编辑文本。记事本或 Eclipse 内置编辑器应该绰绰有余,前提是您已将文件保存为 UTF-8。在 Linux 中,我成功地使用了 gedit 和 emacs。在记事本中,您可以通过单击“另存为”按钮并选择“UTF-8”编码来完成此操作。其他编辑器应该有类似的功能。一些编辑器可能需要更改字体才能正确显示字母,但您似乎没有这个问题。
话虽如此,在为阿拉伯语执行 i18n 时还需要考虑其他步骤。您可以在下面找到一些有用的链接。在使用它之前,请确保在属性文件上使用 native2ascii,否则它可能无法正常工作。我花了很多时间才弄清楚这一点。
如果您使用的是 Eclipse,您可以选择“Window-->Preferences”,然后过滤“content types”。然后你应该能够设置默认编码。在这篇文章的顶部有一个屏幕截图显示了这一点。
除了其他答案中提到的 native2ascii 工具外,还有一个 java 开源库,可以提供要在代码中使用的转换功能
Library 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上找到