属性文件中的特殊/本地化/非拉丁字符显示为问号

时间:2015-04-27 08:41:19

标签: jsp localization jstl properties-file

我正在尝试使用JSTL fmt标记本地化JSP页面中的内容,其中键在所有语言的多个属性文件中定义。除了那些需要日语,韩语等特殊字符的语言之外,它适用于所有语言。它显示了一系列“????”对于这些语言。我甚至将编码设置为UTF-8。这是怎么造成的,我该如何解决?

appMessage_ja.properties中的示例键值对:

LABEL_PASSWORD = \u30d1\u30b9\u30ef\u30fc\u30c9
LABEL_LANGUAGE = \u8a00\u8a9e

1 个答案:

答案 0 :(得分:0)

问号通常仅在char字节映射器本身知道传输的两个侧使用的编码时使用。目标编码不支持源编码中的任何字符将主动替换为问号。在一般的JSP / Servlet Web应用程序中,只有两个标准位置可以出现:

  1. 通过JDBC连接在数据库和Java代码之间传输字符。
  2. 通过HTTP响应在webserver和webclient之间传输字符。
  3. 所有其他地方只会以Mojibake结尾(无法理解的字符序列,空格,由于字体中缺少字形而导致替换字符等),而不是问号。

    在你的情况下,它可能是第二个,因为这里没有数据库的方法。在您使用JSP页面时,您应该在JSP页面的顶部设置页面编码:

    <%@page pageEncoding="UTF-8"%>
    

    这基本上设置了目标编码(以及HTTP响应charset标头中的Content-Type属性)。不要忘记在任何包含和标记文件上重新应用它。如果您想全局配置它,那么您不需要在所有JSP上重复相同的样板,然后将以下条目添加到webapp web.xml

    <jsp-config>
        <jsp-property-group>
            <url-pattern>*.jsp</url-pattern>
            <page-encoding>UTF-8</page-encoding>
        </jsp-property-group>
    </jsp-config>
    

    另见: