为什么我的浏览器将ISO-8859-15特殊字符(Œ,œ,Ÿ)转换为(¼,½,¾)

时间:2018-01-12 09:39:17

标签: java html browser character-encoding

我在HTML表单中输入了文本,我的页面配置为使用ISO-8859-15

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-15">

当我输入以下字符之一(Œ,œ,Ÿ)并提交表单时,我可以在Firebug中看到它被转换(¼,½,¾),我在Debugging(Eclipse)时也看到了这一点。 我不明白为什么。

维基百科页面:https://en.wikipedia.org/wiki/ISO/IEC_8859-15

1 个答案:

答案 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>