2015-12-10 134 views
0

我們最近將應用程序從WAS 7.0(在AIX上)移動到WAS 8.5.5(在Linux上)。從Websphere 7升級到Websphere時的編碼問題8.5.5

while ((i = request.getReader().read(buf, 0, buf.length)) != -1) { 
      sb.append(buf, 0, i); 
     } 

過渡後然而,我們注意到,該應用程序不處理特殊字符 - 它有一對夫婦,使用在XML

XML是從標題檢索的形式發送數據的應用程序接口像è©正確 - 他們是亂碼。

這對我來說就像一個編碼問題。任何人都可以指出需要檢查什麼來了解根本原因?

我在此進一步閱讀,我看到,我可以設置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的編碼不是。我完全迷失在這裏。

+0

您應該使用十六進制查看器來準確地確定'亂碼'的含義,例如'我預期代碼爲0xE8(C)符號,但得到0x9E'' –

回答

0

看起來你的應用程序沒有被編寫爲使用特定的編碼,因此使用會話的默認值。

在AIX和Linux上檢查區域設置爲locale。在Linux上它可能類似於LANG=en_US.UTF-8

讓您的應用程序在Linux上的行爲與在Linux上設置的AIX上的語言環境與AIX上的相同。

一般來說,使用支持unicode的應用程序並不是一個壞主意。但也有例外,您需要堅持另一種編碼,例如LATIN-1適用於一些傳統系統。然後在你的代碼中,你明確地需要在需要的地方選擇這種編碼。