我在HTML表单中输入了文本,我的页面配置为使用ISO-8859-15
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-15">
当我输入以下字符之一(Œ,œ,Ÿ)并提交表单时,我可以在Firebug中看到它被转换(¼,½,¾),我在Debugging(Eclipse)时也看到了这一点。 我不明白为什么。
答案 0 :(得分:0)
Apache Tomcat Wiki很好地解释了这个问题。
今天的大多数Web浏览器都没有指定请求的字符集,即使它不是ISO-8859-1。这似乎违反了HTTP规范。大多数Web浏览器似乎使用用于生成POST的页面的编码来发送请求正文
因此,您需要告诉您的应用程序在传入的HTTP请求中使用了哪种编码。
您必须调用以下函数(在任何参数解析之前):
httpServletRequest.setCharacterEncoding("ISO-8859-15");
在这一点上,最好的做法似乎是设置一个javax.servlet.Filter来做这件事。 Spring随之而来的就是我们需要的:
<filter>
<filter-name>CharacterEncodingFilter</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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<servlet-name>webapp</servlet-name>
</filter-mapping>