为什么我的浏览器将 ISO-8859-15 特殊字符 (Œ, œ, Ÿ) 转换为 (1/4, 1/2, 3/4)



我有一个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>

最新更新