Websphere 8.5.5 UTF-8编码问题

时间:2016-07-15 14:56:58

标签: java spring encoding utf-8 websphere

我在 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>

On Liberty工作正常,但是当我在Websphere上部署应用程序时却没有。

我尝试使用String构造函数直接在utf-8中翻译消息:

new String(byteArray, "UTF-8")

同样的事情发生了。它适用于自由,但它不适用于Websphere。 然后我发现你可以通过添加这些JVM参数来强制WebSphere使用 UTF-8

-Dclient.encoding.override=UTF-8
-Dfile.encoding=UTF-8

就像在这个答案中解释的那样: Character encoding issues on 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=

我被困住了,不知道还有什么可以尝试。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:3)

位于encoding.properties的{​​{1}}文件是另一个包含编码设置的位置。默认值(英语)为<PROFILE_ROOT>/properties。将其更新为en=ISO-8859-1并重新启动服务器。