Java 阻止Tomcat强制执行ISO-8859-1
不管出于什么原因,ApacheTomcat/8.0.28(我使用的不是Spring,不是JSP,只是一个普通的Servlet)忽略了我的Java 阻止Tomcat强制执行ISO-8859-1,java,tomcat,Java,Tomcat,不管出于什么原因,ApacheTomcat/8.0.28(我使用的不是Spring,不是JSP,只是一个普通的Servlet)忽略了我的 private static final String JSON_MEDIA_TYPE = "application/json; charset=utf-8"; response.setContentType(JSON_MEDIA_TYPE); 还有多余的 response.setHeader("Content-Type", JSON_MEDIA_TYPE)
private static final String JSON_MEDIA_TYPE = "application/json; charset=utf-8";
response.setContentType(JSON_MEDIA_TYPE);
还有多余的
response.setHeader("Content-Type", JSON_MEDIA_TYPE);
及
发送
Content-Type: application/json;charset=ISO-8859-1
这显然是错误的(因为JSON总是UTF-8)并破坏了我的输出。请求头包含
Accept:application/json, text/plain, */*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
我很确定,这是托克卡特的错
Content-Tipe:application/json; charset=utf-8
(故意打字)效果很好
最初,web.xml
中没有过滤器,然后我添加了
<filter>
<filter-name>AddDefaultCharsetFilter</filter-name>
<filter-class>org.apache.catalina.filters.AddDefaultCharsetFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>AddDefaultCharsetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
AddDefaultCharsetFilter
org.apache.catalina.filters.AddDefaultCharsetFilter
编码
UTF-8
AddDefaultCharsetFilter
/*
但是没有任何效果。存在许多(潜在)问题:
1) 这一行:
response.setCharacterEncoding("UTF_8");
应该是
response.setCharacterEncoding("UTF-8");
2) 您(可能)不应该将内容编码设置为内容类型的一部分:
String JSON_MEDIA_TYPE = "application/json; charset=utf-8";
response.setContentType(JSON_MEDIA_TYPE);
3) 如果在调用getWriter
/getOutputStream
后调用setCharacterEncoding
和setContentType
,则它们将无效1
更新 2) 为什么? 因为:
- javadocs没有说您可以/应该这样设置,并且
- 如果通过setContentType和setCharacterEncoding(以及要引导的setHeader)设置字符编码,则不清楚什么优先
这是一个猜测:可能是因为您已经在servlet中设置/试图设置编码?该过滤器设置>>默认值编辑配置后是否确保重新启动任何受影响的服务?@bhooks我确定我重新启动了Apache并重新部署了servlet(多次)。还有另一个过滤器,它通过这种方式变得有效,所以这不应该是问题(并且它应该在没有任何过滤器的情况下工作)。请注意,我只关心内容,URI只是简单的ASCII。1)这只是一个输入错误。2) 为什么??3) 就这样!非常感谢!它与
response.setContentType(“application/json;charset=utf-8”)
一起工作。还有一些不清楚的地方:4)为什么过滤器不能工作?5) 为什么太迟了?以前没有写过任何东西。
String JSON_MEDIA_TYPE = "application/json; charset=utf-8";
response.setContentType(JSON_MEDIA_TYPE);