【问题标题】:Character encoding problems with tomcattomcat的字符编码问题
【发布时间】:2012-07-09 18:32:59
【问题描述】:

我在为 Web 应用程序进行字符编码时遇到问题。有一个弹出窗口使用用户输入查询数据库(按姓名搜索人)。问题是重音字符被转换成奇怪的字母,比如ó => ó。这是一个非常标准的问题,但我不知道发生了什么。

我做了什么?

主要关注this

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

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

我已经安装了 apache2.2 和 tomcat 6。

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

提前致谢。

【问题讨论】:

标签: http tomcat character-encoding


【解决方案1】:

确保在数据库和 JDBC 驱动程序级别也正确设置了编码。如何做到这一点取决于 DB 和 JDBC 驱动程序的品牌/版本。有关详细信息,请参阅 DB 和 JDBC 驱动程序特定文档。以 MySQL JDBC 驱动为例,需要在 JDBC 连接 URL 中添加两个特定参数。

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

  • 对于 HTTP GET 请求,在服务器级别进行配置。在 Tomcat 中,这是通过在 Tomcat 的server.xml 中设置<Connector>URIEncoding 属性来完成的。

  • 对于 HTTP POST 请求,请使用执行 ServletRequest#setCharacterEncoding() 的过滤器。

  • 对于 JSP 生成的 HTTP 响应,在每个 JSP 基础上设置 <%@page%>pageEncoding 属性,或者更好的是,在应用程序范围内设置 web.xml 中的 <page-encoding> 条目。

  • 对于 servlet 生成的 HTTP 响应(其中不涉及 JSP!),请使用 ServletResponse#setCharacterEncoding()

  • 最后但同样重要的是,确保您的源代码文件也保存为 UTF-8。确切的配置取决于使用的编辑器。如果是 Eclipse,您可以通过 Window > Properties > General > Workspace > Text File Encoding 来控制它。

另见:

【讨论】:

    【解决方案2】:

    在debian用户的java选项中

    /etc/default/tomcat7
    

    我把这个

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

    那么默认情况下,所有编码似乎都是 UTF-8..

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

    【讨论】:

      【解决方案3】:

      最后对我有帮助的是this article

      我的总结:

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

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

      然后为字符编码添加服务器端过滤器。在 tomcat with spring 的情况下,将以下行添加到 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>
      

      【讨论】:

        猜你喜欢
        • 2012-06-20
        • 2011-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-28
        • 1970-01-01
        相关资源
        最近更新 更多