我有一个HTML表单的文本输入,我的页面配置为使用ISO-8859-15
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-15">
当我键入以下字符之一(Œ,œ,Ÿ(并提交表单时,我可以在Firebug中看到它已转换(1/4,1/2,3/4(,我在调试(Eclipse(时也看到了这一点。我不明白为什么。
维基百科页面 : https://en.wikipedia.org/wiki/ISO/IEC_8859-15
Apache Tomcat Wiki很好地解释了这个问题。
如今,大多数 Web 浏览器都不指定请求的字符集,即使它是 ISO-8859-1 以外的字符集。这似乎违反了HTTP规范。大多数 Web 浏览器似乎使用用于生成 POST 的页面编码发送请求正文
因此,您需要告诉应用程序在传入的 HTTP 请求中使用哪种编码。
您必须调用以下函数(在任何参数解析之前(:
httpServletRequest.setCharacterEncoding("ISO-8859-15");
在这一点上,最好的做法似乎是设置一个javax.servlet.filter来做到这一点。春天来了,我们需要做:
<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>