gpt4 book ai didi

Docker Tomcat 镜像 : Encoding problem with Umlaute when deploying WAR file

转载 作者:行者123 更新时间:2023-11-28 23:11:33 25 4
gpt4 key购买 nike

我有一个部署在 Tomcat 8.5 上的简单(无 spring)Web 应用程序(REST 服务 + HTML 页面)。

如果我将应用程序源代码放入 docker 容器(来自 java:8-jdk 的纯 java 镜像),使用 gradle 在使用 gretty 创建的嵌入式 Tomcat 上构建和运行它,一切正常。

但是,当我使用带有预装 Tomcat 的 docker 镜像(来自 tomcat:8.5)并部署 myApp.war(由 gradle war 插件生成)时,编码变得困惑,像“ü”这样的变音符号显示为“ü” .

但这只发生在使用 Javascript 库“toastr”显示为 toast 的消息以及我使用“javax.mail.Transport”发送的电子邮件的主题部分。 html 页面的内容和邮件的内容按预期显示变音符号。

所有文件都以 UTF-8 编码(例如 Java 源代码)。我试图将 docker 容器上的区域设置更改为 de_DE.UTF-8,但这没有帮助(它也已经设置为 en_US.UTF-8,所以我想这不是问题所在)。我还尝试了设置“JAVA_OPTS=-Dfile.encoding=UTF-8”的 bitnami-docker-tomcat 图像,但这也没有帮助。我尝试向 web.xml 添加一个字符编码过滤器。也不走运。

我想这一定是一种常见问题,但我找不到可行的解决方案。

我的 Dockerfile:

FROM tomcat:8.5
ADD app.war /usr/local/tomcat/webapps/
EXPOSE 8080
CMD ["catalina.sh", "run"]

带有编码过滤器的 web.xml:

<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>
</filter>

<filter-mapping>
<filter-name>setCharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

最佳答案

看来我一直走错了路。问题既不是 docker 容器,也不是 Tomcat 配置。问题是 WAR 文件的创建出错了,没有使用 UTF-8。真的很奇怪,因为 gretty 应该使用相同的编译文件并产生相同的错误。

因此,在我的 gradle 构建脚本中添加以下内容后,所有变音符号最终都正确显示了:

compileJava.options.encoding = 'UTF-8'

tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}

关于Docker Tomcat 镜像 : Encoding problem with Umlaute when deploying WAR file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57391384/

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