JDOM 抛出具有错误 ASCII 字符的解析异常



我在我的Android项目中使用JDOM,每次我在服务器响应中获得一组特定的字符时,我都会得到以下错误消息:

05-04 10:08:46.277:E/PARSE:org.jdom.input.JDOMParse异常:文档 UTF-8 第 95 行出现错误:第 95 行,第 5263 列:未关闭的令牌

05-04 10:08:46.277:E/错误处理程序:处理程序失败:org.jdom.input.JDOMParse异常:第 1 行错误:第 1 行,第 0 列:语法错误

当我通过谷歌浏览器进行相同的查询时,我可以看到所有的XML都很好,实际上没有一个区域没有关闭令牌。在整个应用程序的整个开发过程中,我多次遇到此问题,解决方案一直是删除奇怪的ascii字符(版权徽标或商标字符等,这些字符被复制/粘贴到这些数据字段中(。我怎样才能让它删除这些字符,或者 b 剥离它们并继续该功能。这是我的一个解析函数的示例。

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;
    }
}

这听起来显然像是字符编码问题。我认为达菲莫的评估是正确的。不过我有两个评论....

如果您通过 URL 获取数据,您应该使用 URLConnection.getContentType(( 来获取字符集(如果已设置且字符集不为 null(,以便在 URL 的 InputStream 上设置 InputStreamReader...

你试过 JDOM 2.0.1 吗?这是第一个在安卓上经过全面测试的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

BufferedReader 是否构造为接受编码参数? 也许您需要告诉阅读器或输入流您传递以使用 UTF-8。

最新更新