这可能是一个显而易见的问题。但我之前没有遇到过这种情况。 在我的Spring MVC应用程序中,我在web.xml中有以下配置。
<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>
<url-pattern>/*</url-pattern>
</filter-mapping>
浏览器和服务器之间的数据传输通过JSON使用Jackson Mapper进行。 Firebug中的请求 - 响应标头如下:
Response headers
Content-Type application/json;charset=UTF-8
Server Apache
Transfer-Encoding chunked
Request Headers
Accept application/json, text/javascript, */*; q=0.01
Accept-Encoding gzip, deflate
Accept-Language en-us,en;q=0.5
Cache-Control no-cache
Connection keep-alive
Content-Length 0
Content-Type application/json; charset=utf-8
这是否意味着请求 - 响应被正确编码? 查看标题是确定所用编码的唯一方法吗?
更新
如果正如Polve在下面提到的那样,这些设置只会将解释影响为UTF-8,那么我应该在Spring MVC中对我的响应进行编码?
答案 0 :(得分:2)
CharacterEncodingFilter仅设置您希望另一方将响应(或请求)解释为的编码。
请求并未表示您希望通过Accept-Charset获得UTF-8,因此客户端可以发送他想要的任何内容,并且您的过滤器会说您将解释它为utf-8 ,即使客户端指定了另一种编码( forceEncoding = true )。
所以不,这并不意味着您的请求已正确编码,它表示您应该解释即将发布的内容为utf-8。
答案 1 :(得分:0)
在我的具体情况下,我想知道如何在Spring MVC应用程序中编码我的响应,该应用程序使用Jackson映射到JSON。事实证明,杰克逊的默认编码是UTF-8。
对于那些想要了解更多编码的人,会推荐上面的polve答案。