Android 如何通过UTF-8流放置UTF-16文件?

Android 如何通过UTF-8流放置UTF-16文件?,android,string,parsing,encoding,Android,String,Parsing,Encoding,我试图解析一个xml文件,它是UTF-16编码的。我想将其转换为UTF-8,以便将其放入文档中 当我在vi中打开文件时,我看到如下内容^@ 这是我认为有效的代码: InputStream in = _context.openFileInput(_fileName); InputSource is = new InputSource(new InputStreamReader(in, "UTF-8")); is.setEncoding("UTF-8"); doc = builder.parse(i

我试图解析一个xml文件,它是UTF-16编码的。我想将其转换为UTF-8,以便将其放入文档中

当我在vi中打开文件时,我看到如下内容^@

这是我认为有效的代码:

InputStream in = _context.openFileInput(_fileName);
InputSource is = new InputSource(new InputStreamReader(in, "UTF-8"));
is.setEncoding("UTF-8");
doc = builder.parse(is);
InputSource is = new InputSource(new InputStreamReader(in, "UTF-16"));
这无法正常工作,无法识别的字符在流化为字符串后仍然存在

此外,我在尝试分析文档时遇到的错误是:

org.xml.sax.SAXParseException: name expected (position:START_TAG <null>@1:1 in java.io.InputStreamReader@4059c510) 
org.xml.sax.SAXParseException:需要名称(位置:java.io中的START_TAG@1:1)。InputStreamReader@4059c510) 

一旦读取文件,编码就不再相关,除非您选择将其写回文本(或转换为字节),因为读取后它将在JVM中正确表示。因此,类似这样的方法应该有效:

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

在您尝试保存数据之前,您不需要设置任何其他编码。

一旦您读取了文件,在您选择将其写回文本(或转换为字节)之前,编码是不相关的,因为读取后它将在JVM中正确表示。因此,类似这样的方法应该有效:

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

在尝试保存数据之前,不需要设置任何其他编码。

如果文档是UTF-16编码的,则将其解码为UTF-16。您正在解析Java对象(节点)。为什么要在混合中引入UTF-8?如果文档是UTF-16编码的,则将其解码为UTF-16。您正在解析Java对象(节点)。为什么要在混合中引入UTF-8?谢谢!文件原来是UTF-16LE。谢谢!该文件原来是UTF-16LE。