5

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

我做了什么?

主要是遵循这个

  • 在我的 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。

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

提前致谢。

4

3 回答 3

9

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

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

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

  • 对于 HTTP POST 请求,请使用执行ServletRequest#setCharacterEncoding().

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

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

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

也可以看看:

于 2012-07-09T19:07:16.950 回答
6

在 debian 用户的 java 选项中

/etc/default/tomcat7

我把这个

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

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

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

于 2014-01-08T20:57:22.963 回答
4

最后对我有帮助的是这篇文章

我的总结:

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

<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>
于 2014-03-31T09:16:33.403 回答