javascript - .js 文件中的特殊字符最初未正确显示

标签 javascript tomcat gradle intellij-idea webpack

我在 Tomcat 服务器上通过 IntelliJ Idea 部署了一个 .war 文件。
我注意到一个字符“ä”没有正确显示,而在其他地方正确显示了相同的字符。我发现只有我在 .js 文件中硬编码的特殊字符受到影响。
我尝试在 IntelliJ 中将所有 .js 文件设置为 UTF-8,我还将所有标准编码设置更改为 UTF-8,但错误并没有消失。
我所有的js文件都是用webpack映射到一个index.js文件中的,具体是怎么映射的我就不知道了,因为这是别人一开始搭建的项目。

我最近做了一个有趣的新观察: 当我第一次打开浏览器(使用 Firefox 和 Chrome 测试)时,它显示不正确:
Wrong display
在常规重新加载 (F5) 时没有任何变化,但是当使用 CTRL + F5 重新加载时它突然正确了: Correct display
这让我很困惑……有谁知道这里会发生什么?
我的 Java 文件曾经遇到过同样的问题,但是在更改了我的 gradle 构建文件中的编码后,它就起作用了。
最后我的问题是:
您认为我应该更改哪些内容才能始终正确显示特殊字符?

最佳答案

我在 Windows 服务器上的 tomcat 更新后添加了一个类似的问题:javascripts 内容在浏览器端损坏了字符。 http header 是正确的,所以我进一步调查了一下。

在服务器上,javascript 文件以没有 BOM 的 utf-8 格式保存。

使用 Wireshark,我看到字符“é”(UTF-8 编码文件中的 C3-A9)作为 (C3-83-C2-A9) 传输。这意味着 Tomcat 正在读取一个 ANSI 文件 并将其轻轻地转换为 UTF8!

所以我只是将 BOM 添加到保存的文件中并修复了错误。 (REM:用notepad++很容易添加BOM)。

但我不想更新所有服务器文件,我希望 tomcat 能够正确读取 UTF-8。

简单的解决方法是在 tomcat web.xml 中定义文件编码,如下所示:

<servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
    <init-param>
        <param-name>debug</param-name>
        <param-value>0</param-value>
    </init-param>
    <init-param>
        <param-name>listings</param-name>
        <param-value>false</param-value>
    </init-param>
    <!------------------- add the settings here ------------->
    <init-param>    
        <param-name>fileEncoding</param-name>
        <param-value>utf-8</param-value>
    </init-param> 
    <!------------------- end of the added settings ------------->
    <load-on-startup>1</load-on-startup>
</servlet>

关于javascript - .js 文件中的特殊字符最初未正确显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49275165/

相关文章:

javascript - 似乎无法在 div-div 标签内执行 has-errors 操作?

javascript - WebGL 代码生成与预制库相同的矩阵,但不显示相同的矩阵

javascript - csv格式问题javascript p5

tomcat - Spring Roo + Vaadin 插件 : Running on Tomcat server

tomcat - java.lang.IllegalArgumentException : Invalid <url-pattern> SolrServlet1 in servlet mapping

java - HTTP 状态 500 - 尝试从 Java 文件调用方法时出错

java - Java进程的关闭 Hook 不会在gradle守护进程中触发

java - 如何制作包含内部版本号的 TeamCity 工件?

javascript - 从 setInterval 调用时 Lodash 去抖动不起作用

java - 防止 gradle.properties 扩展