无法更改字符集编码

Posted

技术标签:

【中文标题】无法更改字符集编码【英文标题】:Can't change the charset encoding 【发布时间】:2018-01-14 14:33:09 【问题描述】:

我目前有一个带有 Spring Boot 后端的 Angular 4 应用程序,两者都在 tomcat 9 服务器上提供服务。

无论我尝试什么,当我转到我的应用程序 url 时,所提供的 html 文件的内容类型以 ISO-8859-1 编码(我想要 UTF-8)。

从 html 文件到服务器配置,我尽我所能添加了 utf-8,但这并没有解决问题(从后端返回的数据以 utf-8 编码,但不是 html 文件)。

这是我当前的堆栈:

角 4 春季启动 雄猫 9 Chrome 59 / Firefox 54

在tomcat中:

<filter>
    <filter-name>setCharacterEncodingFilter</filter-name>
    <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <async-supported>true</async-supported>
</filter>

在我拥有的所有连接器中添加了URIEncoding="UTF-8" useBodyEncodingForURI="true"

春天:

在请求标头中添加了带有 utf-8 字符集的内容类型。

在 HTML 中:

添加元数据:<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

如果我忘记了一些信息,请随时问我。

谢谢。

【问题讨论】:

你在哪里看到html的字符编码?它在谷歌浏览器中吗?如果有,是哪个版本? 我在 chrome 59 和 firefox 54 中都看到了。我在其他浏览器中没有尝试过。 这可能是 google chrome 的自动字符集检测的问题,它是在 chrome 55 中引入的 bugs.chromium.org/p/chromium/issues/detail?id=597488 从命令行尝试“wget”为您的 html 并查看下载的 html 的字符集是什么.如果是浏览器的问题,您可以使用一些扩展手动更改字符集。 【参考方案1】:

实际上,我设法通过将 web.xml 中 tomcat 的默认过滤器更改为 spring 的过滤器来使其工作:

<filter>
    <filter-name>encodingFilter</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>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

【讨论】:

以上是关于无法更改字符集编码的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 UIWebView 中的字符编码?

Python请求:UnicodeEncodeError:'charmap'编解码器无法编码字符

mysql 更改数据库字符编码的方法

无法完成保存。日食错误

在Linux如何让更改文件的字符编码

更改数据库字符集编码引起的问题