如何防止JSTL c:用一个字节的字符替换数字字符引用

时间:2014-10-21 10:10:07

标签: utf-8 jstl character rendering

您好,感谢您阅读我的帖子。

我正在使用Tomcat7开发Java动态Web项目。

我的问题是关于“c:out”如何在JSP中呈现数字字符引用。

在“web.xml”中,我有以下“context-param”:

<context-param>
  <param-name>S_IF_MSG_USER_INFO_MY_ACCOUNT_4</param-name>
  <param-value>d&#233;marrer un nouveau ticket,</param-value>
</context-param>

在JSP“foo.jsp”中,我有以下“c:out”:

<c:out value="${initParam['S_IF_MSG_USER_INFO_MY_ACCOUNT_4']}"></c:out>

如果我在浏览器中请求JSP“foo.jsp”并查看结果页面的源代码,则字符d&#233;marrer un nouveau ticket,已替换为démarrer un nouveau ticket, 意味着数字字符引用&#233;已替换为字符é(一个字节0xE9)。

我不希望这种情况发生。 特别是,因为如果Web浏览器字符编码手动更改(默认情况下是UTF8)到“Western ISO-8859-1”,我得到两个字节Ã(0xC3 0xA9)而不是é。这确实是可以预测的,但这正是我试图通过使用数字字符引用来避免的。

我该怎么办?我在哪里搞砸了? 最好的问候。

编辑1

我也试过没有“c:out”:

直接

${initParam['S_IF_MSG_USER_INFO_MY_ACCOUNT_4']}

不幸的是,它还会将&#233;转换为é

1 个答案:

答案 0 :(得分:0)

我在项目中添加了escapeCharactersWithAnAccute()方法。

此方法将字符串作为输入,并返回字符串,其中此集http://www.sagehill.net/livedtd/xhtml1-transitional/xhtml-lat1.ent.html中的字符替换为其数字字符引用。

然后,在JSP中,如果我写下面的内容,我会得到预期的结果:

<c:out escapeXml="false" value="${isd_fun:escapeCharactersWithAnAccute(initParam['S_IF_MSG_USER_INFO_MY_ACCOUNT_4'])}"></c:out>