2012-02-18 188 views
0

我有一個XML文件,我試圖解析,它是UTF-16編碼。我想將其轉換爲UTF-8,以便將其放入文檔中。如何通過UTF-8流傳輸UTF-16文件?

當我在vi打開文件時,我看到類似<^@ T^@一^ @ G^@>^@

這是我認爲的代碼將工作:

InputStream in = _context.openFileInput(_fileName); 
InputSource is = new InputSource(new InputStreamReader(in, "UTF-8")); 
is.setEncoding("UTF-8"); 
doc = builder.parse(is); 

這不能正常工作,在流入字符串之後,無法識別的字符仍然存在。

此外,試圖解析文檔時,我得到的錯誤是:

org.xml.sax.SAXParseException: name expected (position:START_TAG <null>@1:1 in [email protected]) 
+0

如果文檔是UTF-16編碼,則將其解碼爲UTF-16。您正在解析Java對象(節點)。爲什麼要將UTF-8引入混合? – McDowell 2012-02-18 00:31:51

回答

3

一旦你讀取文件的編碼是不相關的,除非你選擇寫回文本(或轉換爲字節)因爲它將在閱讀後在JVM中正確表示。所以像這樣的東西應該工作:

InputSource is = new InputSource(new InputStreamReader(in, "UTF-16")); 

而且你不需要設置任何其他編碼,直到你試圖保存數據。

+0

謝謝!該文件原來是UTF-16LE。 – benkdev 2012-02-22 18:18:31