Tomcat的字符编码问题
Posted
技术标签:
【中文标题】Tomcat的字符编码问题【英文标题】:Character encoding issue with Tomcat 【发布时间】:2012-06-20 19:58:21 【问题描述】:发生了奇怪的字符编码。我正在使用 JSP (JSTL) 和带有 Tomat 6 的 Struts。
我的 JSP 页面编码如下:
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
问题是当我尝试使用 encodeURI 传递 url 时:
<script type="text/javascript">
$('#mailer_filter').change(function()
var val = $(this).val();
console.log(val);
console.log(escape(val));
console.log(encodeURI(val));
location.href = 'mailList.a?' + encodeURI($(this).val());
);
</script>
action 上的参数(java 端)出来为:
Gaz Métro
但是在前端显示为:
Gaz Métro
这是正确的方法。对此我能做些什么??
【问题讨论】:
Java端的价值在哪里看?在日志文件中?如果是这样,可能是您用于读取日志文件的编辑器不期望 UTF-8... 【参考方案1】:关注
1) HTML 代码
<meta contentType="text/html; charset="UTF-8"/>
2) IE浏览器设置 查看 -- 编码 -- Unicode (UTF-8)
3) Tomcat 服务器 server.xml - 在连接器标记中添加“URIEncoding”属性为
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
catalina.sh/catalina.bat - 添加如下
set JAVA_OPTS=--Xms256m -Xmx1024m -Xss268k -server -XX:MaxPermSize=256m -XX:-UseGCOverheadLimit -Djava.awt.headless=true -Djavax.servlet.request.encoding=UTF-8 -Dfile.encoding=UTF-8
set CATALINA_OPTS=-Dfile.encoding="UTF-8"
4) MIME 类型的响应应该是“application/x-www-form-urlencoded”
【讨论】:
我一直在寻找一天来解决这个问题。在 Jetty 上一切正常,但在部署到 tomcat 时,我的变音符号不见了。谢谢!【参考方案2】:您是否遵循了这些步骤?
http://wiki.apache.org/tomcat/FAQ/CharacterEncoding#Q8
复制如下:
使用 UTF-8 作为您对所有内容的字符编码是一个安全的选择。这应该适用于几乎所有情况。
为了完全切换到使用 UTF-8,您需要进行以下更改:
在 server.xml 中设置 URIEncoding="UTF-8"。参考:HTTP 连接器、AJP 连接器。
使用默认编码设置为 UTF-8 的字符编码过滤器
更改所有 JSP 以在其 contentType 中包含字符集名称。
例如,将<%@page contentType="text/html; charset=UTF-8" %>
用于通常的 JSP 页面,将<jsp:directive.page contentType="text/html; charset=UTF-8" />
用于 XML 语法(也称为 JSP 文档)的页面。
更改所有 servlet 以设置响应的内容类型并将内容类型中的字符集名称包括为 UTF-8。
使用response.setContentType("text/html; charset=UTF-8")
或response.setCharacterEncoding("UTF-8")
。
将您使用的任何内容生成库(Velocity、Freemarker 等)更改为使用 UTF-8 并在它们生成的响应的内容类型中指定 UTF-8。
在您的字符编码过滤器或 jsp 页面有机会将编码设置为 UTF-8 之前,禁用任何可能读取请求参数的阀门或过滤器。如需更多信息,请参阅http://www.mail-archive.com/users@tomcat.apache.org/msg21117.html。
【讨论】:
非常感谢 Paul...我已经尝试了上述所有方法.. 仍然没有运气,我一直在寻找解决方案,我什至看到了建议编码为 UTF 的解决方案-8 手动!不过我不想使用这个选项......基本上这篇文章与我的问题相似:***.com/questions/6213377/… 但是这些建议也不起作用。 我见过 6 使用 WebSphere Portal Server 负责这个“在野外”。尝试跟踪每个请求,如果 anything 在设置正确编码之前尝试读取请求参数,则该值将被读取为 ISO8859-1(如果我没记错的话,这是在servlet 规范)。【参考方案3】:尝试将您的 tomcat 连接器(在 server.xml 中)的 URIEncoding 参数设置为 UTF-8:
例如:
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true"
URIEncoding="UTF-8"/>
【讨论】:
感谢您的建议...我在发布之前尝试过此操作,但没有解决问题。 这与输出编码无关。它只会影响从客户端读取的值,并且仅适用于 GET 参数值。以上是关于Tomcat的字符编码问题的主要内容,如果未能解决你的问题,请参考以下文章