XML 序言本身应该是什么编码(以及为什么)
例如应该
<?xml version="1.0" encoding="big5" ?>
本身是用big5编码的吗?
受如何使用 Javascript 在浏览器中解析非 UTF8 XML启发的问题?,其中海报具有以 big5 编码的 XML 序言/声明。
XML 序言本身应该是什么编码(以及为什么)
例如应该
<?xml version="1.0" encoding="big5" ?>
本身是用big5编码的吗?
受如何使用 Javascript 在浏览器中解析非 UTF8 XML启发的问题?,其中海报具有以 big5 编码的 XML 序言/声明。
在 Big5 中编码 ASCII 是不可能的。
Big5 是纯粹的双字节字符集。为了允许混合单字节字符集,所有 Big5 2 字节字符编码都设置了高位。标准从未指定要使用哪个 SBCS,事实上的标准是 ASCII,因为所有 ASCII 字符的高位都清楚,所以可以明确区分。
换句话说,Big5 不包含对应于标准 ASCII 字符集的 2 字节编码,因此包含 XML 序言和标记分隔符的唯一方法是使用 ASCII 字符。
XML 声明必须采用与文档其余部分相同的编码。如果文档在 Big5 中,则 XML 声明必须在 Big5 中。
这对 XML 解析器意味着它必须具有支持的编码列表,并且必须依次尝试它们,直到找到一个解码文件中前 20 或 30 个字节的结果是具有正确编码的有效 XML 声明标签。
当然这个策略可以优化:如果文件的前几个字节是<?xml
ASCII,那么这会减少可能性的集合。
XML 解析器没有义务支持除 UTF-8 和 UTF-16 之类的最小最小集之外的任何编码。