我在我的Android项目中使用JDOM,每次在服务器响应中获得一组特定字符时,我都会收到以下错误消息:
05-04 10:08:46.277:E / PARSE:org.jdom.input.JDOMParseException:文档UTF-8的第95行出错:在第95行,第5263行:未关闭的标记
05-04 10:08:46.277:E /错误处理程序:处理程序失败:org.jdom.input.JDOMParseException:第1行出错:第1行第0列:语法错误
当我通过谷歌浏览器进行相同的查询时,我可以看到所有的XML都很好,并且实际上没有区域没有关闭令牌。在整个应用程序的开发过程中,我多次遇到过这个问题,解决方案一直是删除奇怪的ascii字符(版权标识,或者复制/粘贴到这些数据字段中的商标字符等)。如何删除这些字符,或者删除它们并继续执行该功能。这是我的一个解析函数的例子。
public static boolean parseUserData(BufferedReader br) {
SAXBuilder builder = new SAXBuilder();
Document document = null;
try {
document = builder.build(br);
/* XML Output to Logcat */
if (document != null) {
XMLOutputter outputter = new XMLOutputter(
Format.getPrettyFormat());
String xmlString = outputter.outputString(document);
Log.e("XML", xmlString);
}
Element rootNode = document.getRootElement();
if (!rootNode.getChildren().isEmpty()) {
// Do stuff
return true;
}
} catch (Exception e) {
GlobalsUtil.errorUtil
.setErrorMessage("Error Parsing XML: User Data");
Log.e(DEBUG_TAG, e.toString());
return false;
}
}
答案 0 :(得分:1)
BufferedReader是否构造为采用编码参数?也许您需要告诉您传递的Reader或InputStream使用UTF-8。
答案 1 :(得分:1)
这听起来像是一个字符编码问题。我认为duffymo的评估是正确的。我有两条评论......
如果您通过URL获取数据,则应该使用URLConnection.getContentType()来获取charset(如果已设置且charset不为null)以在URL的InputStream上设置InputStreamReader ...
您是否尝试过JDOM 2.0.1?这是第一个在Android上完全测试的JDOM版本...(以及Android上唯一“支持的”JDOM版本)。 JDOM 2.0.1还有许多性能调整和内存优化,可以使您的处理速度更快。它还修复了许多错误....虽然从我看到你不应该遇到任何错误问题.....
结帐https://github.com/hunterhacker/jdom/wiki/JDOM2-Migration-Issues和https://github.com/hunterhacker/jdom/wiki/JDOM2-and-Android