在Apache HTTP下的Java环境中上载文件后,字符集发生更改
我有一个在独立的WildFly中运行的项目,该项目在Eclipse下本地运行良好,但在Apache HTTP下的远程服务器上运行的同一个项目在提交文件后,会损坏特殊字符。例如:
提交文件前:
提交文件后:
操作系统:Linux
使用:JSF2.2、Java8、WildFly 10和ApacheHTTP2.4
所有XHTML文件都使用UTF-8编码,头部包含meta标记:
<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中启用以下选项。形态:
AddDefaultCharset UTF-8
我不知道我错过了什么。。。有人知道这个问题的解决办法吗?我将感谢任何帮助。提前谢谢你,抱歉英语不好
# 1 楼答案
操作系统运行的字符集是什么?你从
echo $LANG
、echo $LC_CTYPE
或echo $LC_ALL
中得到了什么?可能是在某个地方使用了操作系统的默认字符集我曾经在谷歌容器引擎上的Kubernetes吊舱中运行Wildfly应用程序时遇到过类似的问题。根本没有编码集,所以在启动应用服务器之前,我必须设置以下环境变量:
因此,在启动WildFly之前,请检查操作系统中设置的内容,并根据需要设置环境变量
编辑:根据评论,这似乎是Apache作为代理运行的问题。我不是这里的专家,但也许this answer from superuser可以进一步帮助你
# 2 楼答案
在关闭Apache HTTP并通过IP:port访问系统后,问题仍然存在
然后我在这里找到了一个解决方案: https://rogerkeays.com/servletrequest-setcharactercoding-ignored
我认为是第三方lib造成了损害,可能是PrimeFaces上传过滤器。现在,上传一个文件后,它可以正常工作