0

我在我的 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 列:语法错误

当我通过 google chrome 进行相同的查询时,我可以看到所有的 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;
    }
}
4

2 回答 2

1

BufferedReader 是否构造为采用编码参数?也许您需要告诉 Reader 或 InputStream 您传递使用 UTF-8。

于 2012-05-04T15:30:33.353 回答
1

这听起来像是一个字符编码问题。我认为 duffymo 的评估是正确的。不过我有两条评论....

如果您通过 URL 获取数据,则应使用 URLConnection.getContentType() 获取字符集(如果已设置且字符集不为空)以在 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

于 2012-05-04T16:15:50.723 回答