有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Apache HTTP下的Java环境中上载文件后,字符集发生更改

我有一个在独立的WildFly中运行的项目,该项目在Eclipse下本地运行良好,但在Apache HTTP下的远程服务器上运行的同一个项目在提交文件后,会损坏特殊字符。例如:

提交文件前:

Before submit a file

提交文件后:

After submit a file


操作系统: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

我不知道我错过了什么。。。有人知道这个问题的解决办法吗?我将感谢任何帮助。提前谢谢你,抱歉英语不好


共 (2) 个答案

  1. # 1 楼答案

    操作系统运行的字符集是什么?你从echo $LANGecho $LC_CTYPEecho $LC_ALL中得到了什么?可能是在某个地方使用了操作系统的默认字符集

    我曾经在谷歌容器引擎上的Kubernetes吊舱中运行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可以进一步帮助你

  2. # 2 楼答案

    在关闭Apache HTTP并通过IP:port访问系统后,问题仍然存在

    然后我在这里找到了一个解决方案: https://rogerkeays.com/servletrequest-setcharactercoding-ignored

    我认为是第三方lib造成了损害,可能是PrimeFaces上传过滤器。现在,上传一个文件后,它可以正常工作