从Websphere 7升级到Websphere 8.5.5时出现编码问题

时间:2015-12-10 10:52:35

标签: java encoding websphere ibm-was

我们最近将一个应用程序从WAS 7.0(在AIX上)移到了WAS 8.5.5(在Linux上)。它与几个以xml

形式发送数据的应用程序连接

使用 -

从标题中检索XML
while ((i = request.getReader().read(buf, 0, buf.length)) != -1) {
            sb.append(buf, 0, i);
        }

然而,转换后,我们发现应用程序没有正确处理è©等特殊字符 - 它们是乱码。

这对我来说就像一个编码问题。任何人都可以指出需要检查什么来了解根本原因吗?

我正在进一步阅读此内容,我发现我可以将JVM参数设置为

-Dclient.encoding.override=UTF-8

始终使用UTF-8。这是一个好习惯吗?

修改

Locale output in Linux

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=

Locale output on AIX
LANG=en_US
LC_COLLATE="en_US"
LC_CTYPE="en_US"
LC_MONETARY="en_US"
LC_NUMERIC="en_US"
LC_TIME="en_US"
LC_MESSAGES="en_US"
LC_ALL=

一个应用程序将xml发送为<?xml version="1.0" encoding="ISO-8859-1"?>,另一个应用程序将其发送为<?xml version="1.0">

设置上述JVM设置后,<?xml version="1.0">被正确处理,但编码设置为ISO-8859-1的那个不正确。我完全迷失在这里。

1 个答案:

答案 0 :(得分:0)

由于您似乎没有编写应用程序以使用特定编码,因此使用会话的默认值。

使用locale检查AIX和Linux上的区域设置。在Linux上,它可能类似于LANG=en_US.UTF-8

让您的应用程序在Linux上的行为与在Linux上设置的AIX上的行为相同,语言环境与AIX上的值相同。

一般来说,使用unicode感知应用程序并不是一个坏主意。但是有一些例外情况,你需要坚持另一种编码,例如一些遗留系统的LATIN-1。然后在您的代码中,您明确需要在需要的地方选择此编码。