我在使用Web应用程序的字符编码时遇到问题。弹出窗口使用用户输入查询数据库(按名称搜索人员)。问题是重音字符被转换为奇怪的字母,如ó => ó
。这是一个相当标准的问题,但我无法弄清楚发生了什么。
我做了什么?
主要是关注this。
(request&response).setCharacterEncoding("UTF-8");
web.xml
,server.xml
字符编码参数<?xml version='1.0' encoding='utf-8'?>
。text/html; utf-8
但我仍然遇到同样的问题,虽然有些问题已经解决,例如,从服务器发送到客户端的一些重音字母正在正确显示。
我安装了apache2.2和tomcat 6.
我不知道该做什么,也不知道我应该在这里发布什么相关信息(如果你需要的话请告诉我)......
提前致谢。
答案 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>