2011-03-14 145 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"