我有一个在独立 WildFly 中运行的项目,该项目在 Eclipse 下本地工作正常,但在 Apache HTTP 下的远程服务器中的 WildFly 上运行的同一项目在提交文件后特殊字符被损坏。例如:
提交文件之前:
提交文件后:
<小时/>操作系统:Linux
使用:JSF 2.2、Java 8、WildFly 10 和 Apache HTTP 2.4
所有 XHTML 文件均使用 UTF-8 编码,头部包含元标记:
<meta http-equiv="restrict-type" content="text/html; charset=UTF-8" />
<小时/>
我已经尝试过:
→ enctype 属性中包含“charset”参数的表单:
<h:form id="fileForm" enctype="multipart/form-data;charset=UTF-8">
→ 使用参数运行 WildFly:
-Dfile.encoding=UTF-8
→ 在 httpd.conf 中启用以下选项:
AddDefaultCharset UTF-8
我不知道我错过了什么...有人知道这个问题的解决方案吗?我将不胜感激任何帮助。预先感谢您,并对英语不好表示抱歉。
最佳答案
操作系统运行时使用什么字符集?您从 echo $LANG
、echo $LC_CTYPE
或 echo $LC_ALL
得到什么?可能是在某个地方使用了操作系统的默认字符集。
我曾经在 Google Container Engine 上的 Kubernetes pod 中运行 Wildfly 应用程序时遇到过类似的问题。根本没有设置编码,因此我必须在启动应用程序服务器之前设置以下环境变量:
ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US.UTF-8
ENV LC_ALL=en_US.UTF-8
因此,在启动 WildFly 之前,请检查操作系统中的设置并根据需要设置环境变量。
编辑:根据评论,这似乎是 Apache 作为代理运行的问题。我不是这方面的专家,但也许this answer from superuser可以进一步帮助您。
关于java - Apache HTTP下Java环境上传文件后字符集发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43110161/