Java 属性: � 显示而不是 ä

0ri*_*nal 0 java properties

我有一个包含以下键和值的属性文件:

elsi.log.status.1              = Keine Änderungen
Run Code Online (Sandbox Code Playgroud)

但是字符 Ä 没有正确显示在我的网页上。输出是 �

但是如果我使用 faces-config 然后直接显示来自 xhtml 的消息,则该消息的显示方式与属性文件中的相同

这是用于从 java 中的属性文件获取值的方法。当我调试时,这里的值已经错了(bundle.getString(key) 返回 Keine �nderungen)

    public static String getString(String key) {
    try {
        Locale locale = CurrentEnvironment.getLocale();
        ResourceBundle bundle = ResourceBundle.getBundle(BUNDLE_NAME, locale);
        if (bundle != null) {
            return bundle.getString(key);
        }
    } catch (MissingResourceException e) {
        return '!' + key + '!';
    }
    return '!' + key + '!';
}
Run Code Online (Sandbox Code Playgroud)

使用 xhtml 直接输出作品

<h:outputText value="#{messages.elsi_copyright}" />
Run Code Online (Sandbox Code Playgroud)

我还注意到用十六进制代码替换属性文件中的字符有帮助,但我想知道是否可以这样做。

谢谢你的帮助

Tho*_*mas 5

问题是ResourceBundle.getBundle()使用 ISO Latin-1 编码来读取包,因此无法解释 UTF-8 文件(插入非拉丁 1 字符(如 ä 等)时就是这种情况)。

目前我能想到2个解决方案:

  1. 用编码形式替换每个特殊字符,例如在\u00E4ä 等形式中使用 unicode 点。
  2. 因为 Java 5 ResourceBundle 提供了一种读取 UTF-8 文件的方法,尽管内部缓存和回退机制在这种情况下不起作用,您必须自己做。

更新:而不是一个例子。2、请看这里:How to use UTF-8 in resource properties with ResourceBundle

有很多很好的资源可以帮助您以适合您需要的方式处理包含变音等的包。