Websphere 8.5.5 UTF-8 编码问题

ami*_*zer 3 java websphere encoding spring utf-8

我在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>
Run Code Online (Sandbox Code Playgroud)

在 Liberty 上工作正常,但当我在 Websphere 上部署该应用程序时,它就不行了。

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

new String(byteArray, "UTF-8")
Run Code Online (Sandbox Code Playgroud)

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

-Dclient.encoding.override=UTF-8
-Dfile.encoding=UTF-8
Run Code Online (Sandbox Code Playgroud)

就像这个答案中解释的那样: 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=
Run Code Online (Sandbox Code Playgroud)

我被困住了,不知道还能尝试什么。

任何帮助,将不胜感激。

小智 5

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