无法在Android中使用正确的编码读取XML

时间:2013-07-12 20:36:32

标签: java android xml

我有以下Java代码,它应该在Android的res/xml文件夹中获取XML并解析它。

然而,InputStream可能带有不正确的编码,因为无论我做什么都没关系,我不会得到正确的文本。行org.xmlpull.v1.XmlPullParserException: Unexpected tokenmore details here)中会抛出parser.nextTag();个异常。我已经尝试删除BOM(字节顺序标记)和更改编码。我的XML文件中绝对没有无效字符。在Java项目中运行此文件而不是Android项目,效果非常好。

我检查了其他问题,但其中大多数似乎都做了同样的事情。

我的问题:发生什么事使我无法正确阅读XML文件?

//...
InputStream is = getInstrumentation().getContext().getResources().openRawResource(com.example.test.R.xml.teste);
//...

public List<Field> parseDocument(InputStream in) {
    try {
        XmlPullParser parser = Xml.newPullParser();
        parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
        parser.setInput(in, "utf-8");
        parser.nextTag(); // "org.xmlpull.v1.XmlPullParserException: Unexpected token" is thrown here.
        return readFeed(parser);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return fields;
}

这是一个不起作用的XML示例:http://pastebin.com/i9vRpDW5。在阅读文件时,我确保删除了BOM。

编辑:只是为了了解如何读取XML。我写了以下方法。无论我使用什么编码,我都会收到一个疯狂的文本。

public String readFile(InputStream is) throws IOException {
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    String line = "";
    StringBuilder result = new StringBuilder();
    while ((line = reader.readLine()) != null) {
        result.append(line);
    }
    return result.toString();
}

0 个答案:

没有答案