2012-02-18 182 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