我在Websphere 8.5.5上遇到了一个问题,我的应用程序是一个使用spring rest框架发送邮件的应用。在我的服务中,我接收邮件详细信息并使用spring将其转发给接收者。它能正常工作,但当我尝试发送包含非ASCII字符的消息时,消息中的特殊字符会被替换成问号。使用UTF-8编码无效。在我的个人电脑上,该应用程序运行于Liberty Profile服务器上,最初也无法正常工作。我搜索了这个问题并发现spring需要一个过滤器来解释特殊字符,所以我在我的web.xml中添加了以下行:
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/</url-pattern>
</filter-mapping>
在自由模式下运行良好,但是当我在Websphere上部署应用时却不行。
我尝试使用String构造函数直接将消息转换为utf-8:
new String(byteArray, "UTF-8")
同样的事情发生了。它在自由上运作,但在WebSphere上却不行。 然后我发现你可以通过添加这些JVM参数来强制WebSphere使用UTF-8:
-Dclient.encoding.override=UTF-8
-Dfile.encoding=UTF-8
如在这个答案中所解释的: websphere上的字符编码问题
我按照我在互联网上找到的许多指南所解释的设置了服务器参数并重新启动,但显然它没有起作用。
这是运行WAS的Linux机器上locale命令的输出:
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
我被卡住了,不知道还能尝试什么。
非常感谢任何帮助。
en=ISO-8859-1
。现在的问题是,服务器上运行很多应用程序,它们托管在不同的虚拟服务器中。我的应用程序运行在专门为它创建的虚拟服务器中。有没有一种方法可以在单个虚拟服务器级别上设置encoding.properties
?因为我不希望更改影响服务器上的所有应用程序。 - amicoderozer