tomcat的字符编码问题

时间:2012-07-09 18:32:59

标签: http tomcat character-encoding

我在使用Web应用程序的字符编码时遇到问题。弹出窗口使用用户输入查询数据库(按名称搜索人员)。问题是重音字符被转换为奇怪的字母,如ó => ó。这是一个相当标准的问题,但我无法弄清楚发生了什么。

我做了什么?

主要是关注this

  • 在我的tomcat (request&response).setCharacterEncoding("UTF-8");
  • 上设置第一个过滤器
  • 设置每个web.xmlserver.xml字符编码参数<?xml version='1.0' encoding='utf-8'?>
  • 在连接器中将URIEncoding更改为UTF-8。使用firebug,我已经看到内容类型在获取帖子(主要是有问题的帖子)上设置为text/html; utf-8
  • 将jsp上的元类型和@page更改为UTF-8。

但我仍然遇到同样的问题,虽然有些问题已经解决,例如,从服务器发送到客户端的一些重音字母正在正确显示。

我安装了apache2.2和tomcat 6.

我不知道该做什么,也不知道我应该在这里发布什么相关信息(如果你需要的话请告诉我)......

提前致谢。

3 个答案:

答案 0 :(得分:9)

确保编码也在数据库和JDBC驱动程序级别设置。如何做到这一点取决于DB和JDBC驱动程序make / version。有关详细信息,请参阅DB和JDBC驱动程序特定文档。例如,对于MySQL JDBC驱动程序,您需要向JDBC连接URL添加两个特定参数。

顺便说一下,设置XML文件编码和元标记对HTTP请求/响应编码没有影响。对于基于JSP / Servlet的Web应用程序,只应最低限度地配置以下内容:

  • 对于HTTP GET请求,请在服务器级别配置它。在Tomcat中,可以通过在Tomcat的URIEncoding中设置<Connector>的{​​{1}}属性来完成。

  • 对于HTTP POST请求,请使用执行server.xml的过滤器。

  • 对于JSP生成的HTTP响应,请在每个JSP的基础上设置ServletRequest#setCharacterEncoding()的{​​{1}}属性,或者更好的是,在pageEncoding中设置<%@page%>条目适用于整个应用程序。

  • 对于servlet生成的HTTP响应(其中没有涉及JSP!)使用<page-encoding>

  • 最后但同样重要的是,请确保您的源代码文件也保存为UTF-8。确切的配置取决于使用的编辑器。在Eclipse的情况下,您可以通过 Window&gt;控制它。属性&gt;一般&gt;工作区&gt;文本文件编码

另见:

答案 1 :(得分:5)

中的debian用户的java选项中
/etc/default/tomcat7

我把这个

set JAVA_OPTS=-Djavax.servlet.request.encoding=UTF-8 -Dfile.encoding=UTF-8

然后默认情况下所有编码似乎都是UTF-8。

对我来说,这解决了这个问题。

答案 2 :(得分:4)

最后帮助我的是this article

我的总结:

“URIEncoding =”UTF-8“属性添加到server.xml中的连接器。例如,

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"  redirectPort="8443" URIEncoding="UTF-8"/>

然后为字符编码添加服务器端过滤器。在带有spring的tomcat 的情况下,将以下行添加到web.xml:

<filter>
    <filter-name>charsetFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>charsetFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>