2011-03-14 54 views

回答

1

無需使用外部庫來做到這一點的轉換(略異常處理):

Reader r = new InputStreamReader(new FileInputStream(...), "IBM937"); 
Writer w = new OutputStreamWriter(new FileOuputStream(...), "UTF-8"); 

char[] buf = new char[65536]; 
int size = 0; 

while ((size = r.read(buf)) != -1) 
    w.write(buf, 0, size); 

r.close(); 
w.close(); 
+0

試過這個了。由於某種原因,它不會執行轉換。 輸出應該是這樣的: 僔働咗卆匜叀卼卋卆卐 而不是它的表現是這樣的: VPそあじょほいあお – SNL 2011-03-14 14:02:15

+0

@SNL:它看起來非常奇怪。根據http://www.fileformat.info/info/unicode/char/5350/charset_support.htm,U +5350卐根本不能在IBM 937中表示。您確定您的輸入是IBM 937嗎?你能展示它的十六進制表示嗎? – axtavt 2011-03-14 16:48:36

+0

這是正確的,我也仔細檢查發射機。我們在ebcdic中有一個文件,而在utf-8中有另一個版本。 你碰巧知道各種編碼之間的十六進制值是否保持相同? – SNL 2011-03-14 17:20:52

1

認爲你應該能夠使用CharsetICU。 forNameICU(「ibm-937」),那麼你可以將得到的字符集傳遞給讀寫器。

0

這不是一個字符集轉換,這是一個使用ICU庫的「音譯」例子。

版本:ICU4J 53.1

套餐:com.ibm.icu.text.Transliterator

Transliterator.getInstance("Latin-ASCII").transliterate("Your text"); 

其中: 「拉丁-ASCII」 是 「字符集合」 你需要(注意:此不是一種編碼)。你可以使用Transliterator.getAvailableIDs()來檢查可用的ID;

對於 「拉丁-ASCII」:

Given "123" returns "123" 
Given "abc" returns "abc" 
Given "Š Œ ñ" returns "S OE n"