有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Android中,java无法读取编码正确的XML

我有下面的Java代码,应该在Android的res/xml文件夹中获取XML并对其进行解析

然而,InputStream可能带有错误的编码,因为不管我做什么,我都不会得到正确的文本。在第parser.nextTag();more details here)行中抛出org.xmlpull.v1.XmlPullParserException: Unexpected token异常。我已经尝试删除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) 个答案