鉴于输入:
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<sms body=". what" />
&#34;。&#34;之后的角色。在sms标记的body属性中是U+00A0;
我收到错误:
XMLEncodingException:无效的UTF-8字符编码(第2行)(第13列)
IIUC,该角色的UTF-8表示为0xC2 0xA0
per Wikipedia。果然,输入的字节72和73分别为194和160.
这似乎是XMLParser中的一个错误,或者我错过了什么?
答案 0 :(得分:1)
感谢Monty前来救援on the Pharo User's list:
你是双重解码。使用onFileNamed:/ parseFileNamed:而不是(和 DOM printToFileNamed:写入时的消息系列)和let XMLParser会为您解决此问题,或者之前禁用XMLParser解码 使用#decodesCharacters进行解析:。
更长的解释:
类#on:/ #parse:取一个字符串或一个流(读取 定义)。你给它一个FileReference,但因为参数是 用isString测试并发送#readStream,否则它没有爆炸 然后
文件引用发送#readStream返回自动执行的文件流 解码。但是XMLParser也自动尝试自己的解码, 如果:
输入以BOM开头,或者可以用空字节推断 在第一个非空字节之前或之后。
有一个非UTF-8编码的编码声明。
有一个UTF-8编码声明,但该流不正常 ReadStream(你的情况)。
因此它被解码两次,并且char的解码值导致了 错误。我会考虑改变启发式,以减少对它的渴望 解码。