我的Mac键盘将x-mac-roman字符集发送给Tomcat。有没有办法强制我的浏览器或tomcat以某种方式理解我在Mac上输入的内容?
答案 0 :(得分:3)
您需要确保每个组件在每个阶段都使用相同的字符集。
要强制Tomcat使用特定的字符编码,您需要在连接器上设置URIEncoding。在这种情况下,您可能想要URIEncoding =“x-MacRoman”
您可能还会发现这有用:http://wiki.apache.org/tomcat/FAQ/CharacterEncoding
答案 1 :(得分:2)
请改用UTF-8。每个备受尊重的客户端和服务器端操作系统平台都能理解这一点。它现在也被认为是标准字符编码。对于解码GET请求参数,Tomcat仍默认使用旧的ISO 8859-1字符集;对于解码POST请求参数,Tomcat仍默认为服务器平台的默认编码。
要设置GET请求编码,请在Tomcat的/conf/server.xml
编辑所需的HTTP连接器:
<Connector ... URIEncoding="UTF-8">
要设置POST请求编码,请创建一个servlet过滤器,该过滤器基本上在doFilter()
方法中执行以下操作,并将其映射到匹配所有POST请求的URL模式,例如*.jsp
或{{1 }}:
/*
告诉JSP在生成响应时使用指定的编码(您仍然需要确保使用相同的编码保存JSP文件),这将隐式地告诉客户端使用UTF-8来解释响应并编码后续请求,在每个JSP的顶部设置以下内容:
request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
或者在webapp的<%@page pageEncoding="UTF-8"%>
中设置以下配置条目,以便它应用于每个JSP:
web.xml
如果您碰巧使用数据库,请不要忘记在那里设置正确的编码。
答案 2 :(得分:0)
问题与POST请求有关。 Tomcat对他们不好。修复:将此过滤器添加到您的所有请求中:http://wiki.apache.org/cocoon/SetCharacterEncodingFilter
<filter>
<filter-name>SetCharacterEncoding</filter-name>
<filter-class>SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>