Android ë上的XML分析错误;(带重音的字母)
我有一个xml文件崩溃。它发生在aë,在这个例子中是belgië(荷兰语代表比利时) 我正忙着寻找答案,但就是找不到解决办法 我正在Android下使用sax解析器。 错误:org.apache.harmony.xml.ExpatParser$ParseException:第2行第204列:格式不正确 xml来源:Android ë上的XML分析错误;(带重音的字母),android,xml,sax,Android,Xml,Sax,我有一个xml文件崩溃。它发生在aë,在这个例子中是belgië(荷兰语代表比利时) 我正忙着寻找答案,但就是找不到解决办法 我正在Android下使用sax解析器。 错误:org.apache.harmony.xml.ExpatParser$ParseException:第2行第204列:格式不正确 xml来源: 请注意,我通过流获取数据,这是将此流设置为临时值、将非法字符替换为有效字符并生成新的流的唯一选项,或者您可以在流中添加一些内容来实现这一点吗?我认为您应该替换xml中的特殊字符 请参
请注意,我通过流获取数据,这是将此流设置为临时值、将非法字符替换为有效字符并生成新的流的唯一选项,或者您可以在流中添加一些内容来实现这一点吗?我认为您应该替换xml中的特殊字符 请参见此处的全面字符列表: 它说你的UMLAUTE是这样的:
203&Ë;大写字母e,umlaut标记
如果你想读书的话也可以
希望它能有所帮助。问题不在于解析器——它工作正常——而在于发送XML的任何代码ë需要编码并作为
和#235传递代码>。对其他重音字符、符号和尖括号也必须这样做。似乎您应该使用构造函数,假设服务器发送给您的是UTF-8编码的:
String properXml = new String(byteArrayIReceivedFromServer, "UTF-8");
服务器发送以下标头:
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中对文本有效负载进行编码是非常常见的,因此这是一件必须处理的事情
我的猜测是,如果您直接向解析器提供字节流,它将相应地检测编码行为。如果使用字符流(不推荐),请确保指定正确的编码。取决于服务器发送数据的字符编码。例如,UTF-8的句柄ë同样取决于字符编码。伊万的答案看起来是对的。