SAXParser 无法解析某些字符

Posted

技术标签:

【中文标题】SAXParser 无法解析某些字符【英文标题】:SAXParser fails to parse some characters 【发布时间】:2011-06-18 03:47:54 【问题描述】:

我在 android/java 上使用 SAXParser 等做一些简单的 SAXParsing

它可以正确解析文件,但是遇到一些特殊字符时会打嗝,例如如果它解析下面的这个xml:

<?xml version="1.0" encoding="ISO-8859-1" ?><MTRXML version="1.0">
<GEOCODE key="pohj">
<LOC name1="Pohjantori" number="" city="Espoo" code="995" address="" type="1" category="poi" x="2544225" y="6674893" lon="24.79378" lat="60.18324" />
<LOC name1="Pohjois-Haaga" number="" city="Helsinki" code="41" address="" type="1" category="poi" x="2549164" y="6680186" lon="24.88405" lat="60.23018" />
<LOC name1="Pohjois-Leppävaara" number="" city="Espoo" code="50" address="" type="1" category="poi" x="2545057" y="6679240" lon="24.80974" lat="60.22216" />

当它在最后一行的 Pohjois-Leppävaara 中遇到 ä 时会打嗝。

它给出的错误是:

01-30 18:14:52.039: WARN/System.err(686): org.apache.harmony.xml.ExpatParser$ParseException: At line 5, column 24: not well-formed (invalid token)

我确信 SAXParser 可以处理这些字符,但我相信我需要在某处设置一些编码等?

Java 代码是这样的:

AXParserFactory factory = SAXParserFactory.newInstance();

    SAXParser parser = null;
    try 
        parser = factory.newSAXParser();
     catch (ParserConfigurationException e) 
        e.printStackTrace();
        return null;
     catch (SAXException e) 
        e.printStackTrace();
        return null;
    

    XmlHandler handler = new XmlHandler();
    try 
        parser.parse(urls[0], handler);
     catch (SAXException e) 
        e.printStackTrace();
        return null;
     catch (IOException e) 
        e.printStackTrace();
        return null;
    

【问题讨论】:

【参考方案1】:

我预计这是文档编码中的错误。使用十六进制编辑器验证Leppävaara 是字节序列4c 65 70 70 e4 76 61 61 72 61。如果ä 不是E4,则文档已使用除ISO-8859-1 之外的其他编码保存。

【讨论】:

【参考方案2】:

这似乎解决了这个问题:

Android: SaxParser problems using ISO-8859-1 encoding

            StringReader sr = new StringReader(xmlString);
            InputSource is = new InputSource(sr);
            is.setEncoding("ISO-8859-1");
            xmlReader.parse(is);

【讨论】:

以上是关于SAXParser 无法解析某些字符的主要内容,如果未能解决你的问题,请参考以下文章

ios 解决数据请求json解析字典后,由于java某些类库转换json字符串后出现键值为<null>无法保存在userDefault的问题

Java SAXParser 解析无效的 xml [重复]

Android 上的 Apache Commons Configuration Plist 解析器 - 没有可用的验证 SAXParser 实现

无法解析某些属性的占位符

无法使用 xpath 解析来自某些 html 元素的某些信息

如何解决“无法解析某些模块 oracledb”?