转义的Unicode有时会正确呈现,但有时会呈现为HTML实体

时间:2014-01-08 20:37:08

标签: jsp java-ee unicode utf-8 glassfish

我遇到了一个问题,我的.properties文件中的某些值无法在我的UI中正确呈现,但大多数都这样做。我看到HTML实体名称,而不是带有变音符号的字母。我会解释到目前为止我做了什么:

起初,我无法使用变音符号来正确渲染任何字母。幸运的是我找到了this post,并且我能够通过在我的.properties文件中使用转义的Unicode来取得进展。

(侧面说明,虽然转义Unicode主要解决了这个问题,但它使.properties文件难以阅读。幸运的是,IDEA为您提供了使用转义unicode的选项,并且仍然使用人类可读的字符读取文件阅读更多here。)

现在这是我当前的问题:在我的应用程序的某些部分,带有变音符号的字母显示为Latin-1 HTML实体名称。例如,我看到“& amp; ccedil;”而不是'ç'。 (我在&和amp之间增加了一个额外的空格,否则它会变成&符号)。起初,我不知道这意味着什么,但在查看this table之后,我知道它是一个ISO-8859-1实体名称。

这是我尝试过的东西,虽然没有任何成功给我带变音符号的字符。

  1. 虽然我还在使用Glassfish 2,但我找到了this post,并尝试将以下内容添加到我的web.xml

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

    现在,当我检查Chrome开发工具中的响应标头时,我可以看到以下内容:

     Content-Type:text/html;charset=UTF-8
    

    但是,我仍然在我的UI中看到上述HTML实体名称。

  2. 我尝试在JSP本身中显式设置charset,方法是将以下内容添加到从.properties文件中提取值的JSP中:

    <%@page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>
    
  3. 在尝试修复此问题时,我已经读过ISO 8895-1是属性文件的默认编码,因此我尝试在IDEA中更改编码(我使用的是11,顺便说一句)。你可以转到设置&gt;这样做。文件编码。底部是一个名为“属性文件的默认编码”的选项,我将其更改为UTF-8。但是,我仍然看到HTML实体名称。

  4. 我已经尝试了一段时间了,我终于在我的智慧结束了。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我真的不明白属性文件是如何适应这一点的,但我建议只是编写一个函数来逐字符串地逐字符串,并将所有字符更改为128以上的字符代码到&amp; #charcode;其中charcode是十进制代码,并在显示之前运行所有精美文本。然后,即使您没有正确设置页面编码,浏览器仍应能够正确处理字符。 (例如,'ç'将是&amp;#231;)

  

例如,我看到“&amp; amp; ccedil;”而不是'ç'。 (我在&amp;添加了一个额外的空间。   和放大器,否则它呈现为&符号

你应该做的是改变&amp; amp; ccedil;和&amp; ccedil;然后它将在浏览器中显示实际字符。