java - 静态资源的编码问题

标签 java tomcat tomcat7

我知道这是一个常见问题,但我找不到现有的帖子来解决这种情况。

当前正在从旧机架服务器迁移到 AWS EC2 实例的应用程序出现字符编码问题。到目前为止,我尝试过的一切都没有解决问题。

我有一个 war 文件的发布版本,比方说部署到 Tomcat 7.0.32 的 app-1.0.war(是的,我知道它很旧,它是一个遗留应用程序,现在我希望 EC2 实例像尽可能接近现有服务器)并且 JDK 是 1.7.0_07。相同的构建在两个环境中。

旧操作系统是 SLES (SUSE Linux Enterprise Server),在 AWS 中我们使用的是 Ubuntu 16.04.3 LTS。

在这两种环境中,语言环境都设置为 en_GB.UTF-8

此外,在这两种环境中,Tomcat 的 server.xml 在连接器中都有 URIEncoding="UTF-8"。

在这两个系统上,如果我对出现问题的缩小 Javascript 文件使用 file -i,它会将文件检测为 utf-8:

myjavascript.min.js: text/plain charset=utf-8

当查看文件系统上的文件内容时,我可以看到在两个系统上都有一个带有 £ 符号的字符串。

但是,如果我使用 curl 通过 Tomcat 请求相同的文件,旧主机会正确提供它,而新环境会将井号替换为 ,即使两者的内容类型都是 application/x-javascript;charset=UTF-8

我已经尝试将 -Dfile.encoding=UTF-8 添加到 args,但这没有帮助。反正老环境也没用。

最佳答案

这根本不是文件编码问题,而是数据库问题。

我直接将一些特殊字符回显到webapp展开目录中的javascript文件中,然后重新启动tomcat。使用 curl 检索文件时,我可以看到字符不存在。所以我检查了文件系统上的文件,果然他们在那里。然后我做了一个查找,看看其他地方是否存在另一个同名文件,也许是某种缓存。

现在不仅我感到困惑,其他一些同事也感到困惑。然后我意识到 javascript 构成了 Web 应用程序内置的 CMS 使用的主题的一部分。首次部署应用程序时,CMS 内容全部加载到数据库中。

因此,在疯狂追逐数小时之后,结果与我最初的预期完全不同。

关于java - 静态资源的编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50834726/

相关文章:

java - 如何在 ArrayList 中保留唯一值的原始顺序?

java - 如何在 Spring Rest Call 中使用 GridFS 从 Mongodb 发送和检索图像?

tomcat 7 中的 java.lang.OutOfMemoryError

java - Maven Tomcat 7 - 构建

java - 如果不存在重复值,则将类/对象添加到数组列表

java - ANT:定义一个变量并执行另一个任务

java - 异常解析器和调度器不转发

rest - 凭据包含 Unicode 时的基本身份验证编码

web-services - 如何使用 Tomcat 7.0.27 提供 SPARQL 端点

ssl - jax-ws tomcat7 ssl证书