XML乱码问题和encoding的理解

文件编码

文件编码也称为字符编码,用于指定在处理文本时如何表示字符。一种编码可能优于另一种编码主要取决于它能处理或不能处理哪些语言字符,不过通常首选的是 Unicode。 读取或写入文件时,未正确匹配文件编码的情况可能会导致发生异常或产生不正确的结果。
编码类型

处理文件时,Unicode 是首选编码。Unicode 是全球范围的字符编码标准,该标准使用 16 位代码值来表示现代计算中使用的所有字符,包括印刷中使用的技术符号和特殊字符。

encoding属性和文件格式的关系

我以前理解的是xml里的encoding定义的编码必须与文件格式相匹配。即<? xml encoding="utf-8"  ?>,那么,文件格式必须是一个utf-8文件。encoding的值必须和文件格式(即BOM,BOM就是 byte order mark的缩写)相匹配,不然在解析XML时,可能会出现乱码,但是实际不是这样的。

W3C定义了三条XML解析器如何正确读取XML文件的编码的规则:
 1.如果文挡有BOM(字节顺序标记,一般来说,如果保存为unicode格式,则包含BOM,ANSI则无),就定义了文件编码(另存为文件时,选择的编码格式)。
 2.如果没有BOM,就查看XML encoding声明的编码属性。
 3.如果上述两个都没有,就假定XML文挡采用UTF-8编码

有了这三条规则,那这个规则就清楚多了。
首先,XML解析器根据文件的BOM(文件存储格式)来解析文件;如果没找到BOM,由用XML里的encoding属性指定的编码;如果xml里encoding没指定的话,就默认用utf-8来解析文档。然后又可以推出,BOM和ENCODING都有的话,则以BOM指定的为准。

结论

结论是:编码属性应当被指定为文档被保存时所使用的编码。
我最好的避免错误的建议是:
使用支持编码的编辑器,如Editplus
确定编辑器使用的编码(一般是可以查看和修改的)
在您的 XML 文档中使用相同的编码属性,即encoding的值

猜你喜欢

转载自blog.csdn.net/lgxzzz/article/details/121344761
今日推荐