【问题标题】:XML parse error on ë (crash with accented letters)ë 上的 XML 解析错误(带有重音字母的崩溃)
【发布时间】:2012-02-07 15:34:27
【问题描述】:

我在一个 xml 文件中发生了崩溃。它出现在 ë 上,在本例中为 belgië(比利时的荷兰语)。

我正忙于寻找答案,但找不到解决方案。

我在 Android 下使用 sax 解析器。 错误:org.apache.harmony.xml.ExpatParser$ParseException:在第 2 行第 204 列:格式不正确 xml来源:http://biohorma.weatheronyoursite.com/villadm_hooikoortsverwachting_be.xml

旁注,我通过流获取数据,这是将此流设置为临时值的唯一选择,将非法字符替换为有效字符并创建一个新流,或者您可以在流中添加一些内容这样做?

【问题讨论】:

    标签: android xml sax


    【解决方案1】:

    您似乎应该使用 String (byte[] bytes, String enc) 构造函数,假设服务器发送给您的内容是用 UTF-8 编码的:

    String properXml = new String(byteArrayIReceivedFromServer, "UTF-8");
    

    【讨论】:

      【解决方案2】:

      问题不在于解析器——它运行正常——而在于发送 XML 的任何代码。 ë 需要编码并作为ë 传递。其他重音字符、& 和尖括号也必须这样做。

      【讨论】:

      • 再次,取决于字符编码。伊万的回答看起来是对的。
      【解决方案3】:

      我认为你应该替换 xml 中的特殊字符..

      在此处查看完整的字符列表:http://www.w3schools.com/tags/ref_entities.asp

      它说你的元音变音像:Ë Ë Ë capital e, umlaut mark

      如果你想阅读,也可以给a brief explanation

      希望对你有帮助。

      【讨论】:

      • 取决于服务器发送数据的字符编码。例如,UTF-8 处理 ë。
      【解决方案4】:

      服务器发送这些标头:

      Content-Type: text/xml
      Content-Length: 124512
      

      由于没有为内容类型指定字符集,因此通常正确的假设是 US_ASCII。但是,XML 有效负载似乎以 ISO-8859-1 编码

      <?xml version="1.0" encoding="iso-8859-1"?>
      

      并且“ë”被编码为 0xEB (235)。服务器在 ISO-8859-1 中对文本有效负载进行编码是很常见的,因此这是一个简单的必须处理的事情。

      我的猜测是,如果您直接使用字节流为解析器提供服务,它会相应地检测编码行为。如果您使用字符流(不推荐),请确保指定正确的编码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-26
        • 2011-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-23
        • 1970-01-01
        相关资源
        最近更新 更多