xto*_*ofl 42 xml header character-encoding
查看XML标头
<?xml version="1.0" encoding="UTF-16" standalone="no"?>
Run Code Online (Sandbox Code Playgroud)
我是否正确地声明encoding属性是
或者该属性不是关于流的内容?
我在这里混淆了什么吗?
Joa*_*uer 41
如您所述,您必须知道文件的编码才能读取encoding属性.
但是,有一种启发式方法可以让您足够接近"真实"编码,以便您阅读编码属性.这是有效的,因为<?xml按定义的部分只能包含ASCII范围内的字符(但它们是编码的).
XML标准甚至描述了用于找出编码的确切过程.
编码标签也不冗余.例如,如果您使用XML规范中的算法来查找使用某些基于ASCII(或ASCII兼容)的编码,您仍然需要读取编码以找出实际使用的编码(有效候选将是ASCII ,UTF-8,任何ISO-8859-*编码,任何Windows-*编码,KOI8-R以及许多其他编码器.对于<?xml零件本身而言,它不会产生任何差别,但对于文档的其余部分,它可以产生巨大的差异.
关于误标记的XML文件:是的,这很容易产生的,但是:XML规范明确规定,这些文件是恶意形成的,因此是不正确的XML.必须将不正确的编码报告为错误(只要可以检测到它们!).所以这就是生成XML的人的问题.
你说它看起来像一个奇怪的设计是对的.它只能起作用,因为XML声明只使用ASCII字符,几乎所有编码都是ASCII的超集.如果你准备接受不是的东西,例如EBCDIC,你可以检查文件是否以EBCDIC表示的任何内容开头"<?xml".这意味着您依赖于文件头中的一般冗余级别,而不是纯粹的编码属性本身.像XML中的许多东西一样,它实用且有效,但并不是特别优雅.