JDOM使用错误的ascii字符抛出Parseing Exceptions

时间:2012-05-04 15:26:21

标签: android jdom

我在我的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;
    }
}

2 个答案:

答案 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-Issueshttps://github.com/hunterhacker/jdom/wiki/JDOM2-and-Android