Android XmlPullParser UTF-8 问题

Posted

技术标签:

【中文标题】Android XmlPullParser UTF-8 问题【英文标题】:Android XmlPullParser UTF-8 problem 【发布时间】:2011-01-11 00:51:46 【问题描述】:

我有一个用

构建的 XML 文档
org.xmlpull.v1.XmlSerializer

本文档包含以下 XML 序言

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>

当我尝试使用解析此文档时

import org.xmlpull.v1.XmlPullParser;

使用以下配置代码

XmlPullParser pullParser = Xml.newPullParser();
pullParser.setInput(theInputStream, "utf-8");

我在调用时得到未解码的 utf-8 字符串

String text = pullParser.getText();

看来android中的XmlPullParser(我用的是1.5)不支持utf-8。我错过了什么吗?

提前谢谢你。

【问题讨论】:

【参考方案1】:

不确定是否重要,但您可以尝试两件事

    使用UTF-8 而不是小写

还有

    尝试使用pullParser.setInput(theInputStream); 并查看pullparser 是否可以自行确定编码。

【讨论】:

pullParser.setInput(theInputStream); 帮了我大忙 - 使用 InputStream 时,XmlPullParser 似乎正确处理了 BOM 【参考方案2】:

这个问题很老,但我最近使用 XMLPullParser 遇到了同样的问题。就我而言,我正在从 OkHttp ResponseBody 解析 UTF-8 编码的 XML 流。我有必要为此指定输入编码字符集。万一其他人降落在这里:

override fun convert(response: ResponseBody): ArchNewsFeed? 
        val encoding = Charsets.UTF_8.name()
        val factory = XmlPullParserFactory.newInstance()
        factory.isNamespaceAware = true;
        val parser = factory.newPullParser()
        parser.setInput(response.byteStream(), encoding)
        ...

    

【讨论】:

以上是关于Android XmlPullParser UTF-8 问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用xmlpullparser解析android中的汉字

XmlPullParser 与 XmlSerializer

Android:DOM vs SAX vs XMLPullParser 解析?

org.xmlpull.v1.XmlPullParser 的 Android ProGuard 错误

android XMLPullParser读取xml文件

XmlPullParser - 意外令牌(android)