Android ë上的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文件崩溃。它发生在aë,在这个例子中是belgië(荷兰语代表比利时)

我正忙着寻找答案,但就是找不到解决办法

我正在Android下使用sax解析器。 错误:org.apache.harmony.xml.ExpatParser$ParseException:第2行第204列:格式不正确 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的句柄ë同样取决于字符编码。伊万的答案看起来是对的。