2015-05-29 57 views
0

我有Java應用程序,用戶從用戶界面輸入「西班牙字符」並需要在其他頁面上顯示。在WINDOWS環境下應用程序沒問題,但是在UNIX/Linux服務器上部署時,西班牙文字符顯示不正確Linux服務器不支持西班牙字符

這是我的Unix語言環境設置(使用區域設置命令)

LANG= 
LC_CTYPE="C" 
LC_COLLATE="C" 
LC_MONETARY="C" 
LC_NUMERIC="C" 
LC_TIME="C" 
LC_MESSAGES="C" 
LC_ALL= 

我的UNIX框字符編碼器(用java我檢查Charset.defaultCharset())是ISO 8859 1 和我的Java代碼來顯示這個數據是

spanishName = new String(spanishName.getBytes("8859_1"), "UTF-8"); 

現在正在打印N?? L???d?

如果我直接打印這個變量,然後NT= LTß±dTr

但原數據是Néó Léáñdér

+0

您每次都假設ISO拉丁語。也許你在* nix服務器中部署時不需要轉換爲Unicode。 – Mena

+0

對不起,這有些含糊......當使用ISO-8859-1或ASCII時,顯然你不能可視化這些字符,因爲它們沒有被包含並且必須被誤解。這裏的問題是_why_你的環境有這樣的設置。除非另有說明,今天的Linux系統因此使用UTF-8編碼。所以你的語言環境設置應該像'en_US.UTF-8' ... – arkascha

+0

我認爲,我們使用舊的UNIX框,並且更改這些設置超出了我的範圍。我需要在我的代碼中正確的數據。請告訴我,我們是否可以在我們的java代碼中處理或覆蓋它。只是爲了我的信息,我們如何更改unix框中的_locale settings_? – user3035305

回答

2

UTF-8編碼將不會在POSIX 「C」 的區域設置顯示。您的服務器可能支持其他語言環境。看到這一點,運行

locale -a 

,並查找設置,這最終在各種「UTF8」或「UTF8」(大寫和小寫)的。如果找到一個,請將您的語言環境變量設置爲

假設您發現en_US.UTF-8。然後(假設你的shell是kshbash),你可以運行Java應用程序之前執行這些命令:

unset LANGUAGE 
LANG=en_US.UTF-8; export LANG 
LC_CTYPE=en_US.UTF-8; export LC_CTYPE 
LC_ALL=en_US.UTF-8; export LC_ALL 

csh,這將是

unsetenv LANGUAGE 
setenv LANG en_US.UTF-8 
setenv LC_CTYPE en_US.UTF-8 
setenv LC_ALL en_US.UTF-8 

這將設置系統區域 。還有其他方法來設置語言環境,如

也就是說,在命令行(從Oracle文檔報價)指出:

其次,在某些Java運行時實現中,應用程序用戶可以通過設置user.language,user.country和user.variant系統屬性,通過在命令行上提供此信息來控制主機的默認語言環境。

,並讓爲例

java -Duser.language=fr -Duser.country=CA Default 

最後,

三,你的應用程序可以調用setDefault(Locale aLocale)方法。 setDefault(Locale aLocale)方法可讓您的應用程序設置全系統資源。使用此方法設置默認語言環境後,對Locale.getDefault()的後續調用將返回新設置的語言環境。

注意,Java使用與系統區域設置不同的名稱,而不是所有的都支持每個平臺上(見table);你將不得不找到適合你的東西。

+0

如何將我的語言環境設置爲(我不知道UNIX)?...我們可以在不改變環境的情況下實現嗎? – user3035305

+0

感謝您提供的信息。我認爲我沒有理由改變它。無論如何,我必須用java來做。我們可以在Java代碼中處理它嗎? – user3035305