导读:
如果将XML文件存为UTF-8 BOM格式,如果使用fileStream读取并转换为XML会报错"The markup in the document following the root element must be well-formed."。UTF-8签名(UTF-8 signature)也叫做BOM(Byte Order Mark),是UTF编码方案里用于标识编码的标准标记。如果多个文件设置了签名,在二进制流中就会包含多个UTF-8签名,也就是导致XML转换失败的"root element must be well-formed"原因。
在UCS 编码中有一个叫做”ZERO WIDTH NO-BREAK SPACE”的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输 字符”ZERO WIDTH NO-BREAK SPACE”。这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little- Endian的。因此字符”ZERO WIDTH NO-BREAK SPACE”又被称作BOM。所以还有一个解决思路就是在读取到该字符时,删除该字符。
当然,最简单的办法是使用文本编辑器,保存为UTF-8无BOM格式。"NotePad++"编辑器可以选择"格式-字符编码转换为UTF-8码(无BOM)"。
本文转自
http://www.moorwind.com/read.php?229
如果将XML文件存为UTF-8 BOM格式,如果使用fileStream读取并转换为XML会报错"The markup in the document following the root element must be well-formed."。UTF-8签名(UTF-8 signature)也叫做BOM(Byte Order Mark),是UTF编码方案里用于标识编码的标准标记。如果多个文件设置了签名,在二进制流中就会包含多个UTF-8签名,也就是导致XML转换失败的"root element must be well-formed"原因。
在UCS 编码中有一个叫做”ZERO WIDTH NO-BREAK SPACE”的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输 字符”ZERO WIDTH NO-BREAK SPACE”。这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little- Endian的。因此字符”ZERO WIDTH NO-BREAK SPACE”又被称作BOM。所以还有一个解决思路就是在读取到该字符时,删除该字符。
当然,最简单的办法是使用文本编辑器,保存为UTF-8无BOM格式。"NotePad++"编辑器可以选择"格式-字符编码转换为UTF-8码(无BOM)"。
本文转自
http://www.moorwind.com/read.php?229