2016-01-20 29 views
1

特殊字符的地方我正在一個APP,其中我必須生成EXCEL與XSSFCellStyle等,我使用Apache POI 3.9。Apache POI 3.9生成的Excel XSSF有?代替像á(西班牙語)在weblogic

在一些領域我這樣做:

cell.setValue(myString); 

myString 5月包含特殊字符,如ñá,這是西班牙語。這些字符可能來自i18n.properties,或硬編碼爲純字符串。

myString = "ññññññññ"; 

一切都很好,在本地機器Tomcat8,但在WebLogic Server中,在Excel中生成的,我看到'?'代替這些字符。

我在Weblogic服務器的某處讀取默認字符集是UTF-8。當地的環境是西班牙語(cp1252),在Eclipse Luna的工作空間字符集也是cp1252,所以這可能是原因,但我不確定。我是否應該更改Preference - Workspace或JVM參數-Dfile.encoding=UTF-8

我也讀過關於Apache POI編碼處理,API處理這一切,所以我不擔心這一點。所有我能做的就是設置字體的字符集,這樣的:

font.setCharSet(FontCharset.DEFAULT); 

但是,我看不到UTF-8這裏。在源代碼中我看到:

/** 
* Charset represents the basic set of characters associated with a font (that it can display), and 
* corresponds to the ANSI codepage (8-bit or DBCS) of that character set used by a given language. 
* 
* @author Gisella Bronzetti 
*/ 
public enum FontCharset { 

ANSI(0), 
DEFAULT(1), 
SYMBOL(2), 
MAC(77), 
SHIFTJIS(128), 
HANGEUL(129), 
JOHAB(130), 
GB2312(134), 
CHINESEBIG5(136), 
GREEK(161), 
TURKISH(162), 
VIETNAMESE(163), 
HEBREW(177), 
ARABIC(178), 
BALTIC(186), 
RUSSIAN(204), 
THAI(222), 
EASTEUROPE(238), 
OEM(255); 

既不是WESTEUROPE。那麼我該如何設置它?

+2

Java本身和通過該Apache POI將字符串處理爲Unicode。所以只要你輸入正確的數據,它應該正確處理它們,而不需要任何編碼設置。我首先會檢查WebLogic服務器上的數據是否確實正確地進入,例如通過執行String.getBytes(「UTF-16」)的hexdump並驗證您是否與本地相同... – centic

回答

0

謝謝@centic的提示。通過settting參數-Dfile.encoding=UTF-8,或

  • 更改文本文件編碼到UTF-8我在Eclipse項目

    • 更改JVM編碼:我終於找到我的解決方案。

    這樣的特殊字符的字符串中的硬編碼將被轉換爲?,我手動固定它們並保存.javaUTF-8(現在是默認值),並編譯項目,使我的抗戰。現在在Weblogic中一切正常。

    我認爲問題在於,在本地機器上,我的java文件是根據JVM和Eclipse設置編碼爲cp1252,然後在Tomcat中,在同樣的環境下,也有cp1252其解碼設置(包括繼承從我的Windows 7),所以沒關係。但在Weblogic中,它只接受UTF-8作爲輸入,因此只會使用UTF-8對我的WAR/class文件進行解碼,因此編碼爲cp1252的字符無法識別。