gpt4 book ai didi

java - 阻止 Tomcat 执行 ISO-8859-1

转载 作者:行者123 更新时间:2023-11-28 22:41:12 24 4
gpt4 key购买 nike

无论出于何种原因,Apache Tomcat/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);

response.setCharacterEncoding("UTF_8");

并发送

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

我很确定,这是 Tocmcat 的错,因为

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>

但没有任何效果。

最佳答案

有许多(潜在的)问题:

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 之后调用 setCharacterEncodingsetContentType,那么它们将具有没有影响1


更新

2) Why?

因为:

  • javadocs 没有说你可以/应该那样设置,并且
  • 如果您同时通过 setContentType 和 setCharacterEncoding(以及 setHeader 启动)设置字符编码,则不清楚优先级是多少

最好按照 javadocs 所说/显示的方式做事......特别是如果你想要可移植性。

4) Why the filter doesn't work?

这是一个猜测:可能是因为您已经设置/尝试在 servlet 中设置编码?该过滤器设置 >>default<< 字符集。

5) Why was it too late? Nothing has been written before.

因为 javadoc 说是对 getWriter() 等的调用“提交”了响应 header 。


1 - 也就是说,对发送给客户端的响应没有影响。 HttpServletResponse 对象可能会反射(reflect)您已进行的调用。

关于java - 阻止 Tomcat 执行 ISO-8859-1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34521880/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com