如何在不知道编码的情况下读取编码头?

时间:2009-10-20 15:18:26

标签: html xml character-encoding

如果我正在阅读HTML文件的XML,那么我是否必须阅读告诉我能够读取文件的编码的标签?该标签的编码方式与文件的编码方式不同吗?我很好奇你如何在不了解编码的情况下阅读该标签。我意识到这是解决了问题。我很好奇它是如何完成的。

更新1

我不明白,在UTF-16中,每个角色不会占用2个字节,而不是一个,并且与ascii不同?例如,UTF-16(U + 0045)中的字符E是0xfeff0045。那是0xfeff然后是0x0045,但是一些编码会改变它的结尾。你是否必须通过检查0xfeff并发现它不能是ASCII或其他东西来解决这个问题?

3 个答案:

答案 0 :(得分:6)

以下是W3C对此的评价:

  

XML编码声明函数   作为每个实体的内部标签,   指示哪个字符编码   正在使用。在XML处理器之前可以   但是,阅读内部标签   显然必须知道什么性格   编码正在使用 - 这是什么   内部标签试图表明。   在一般情况下,这是一个   无望的情况。这不完全是   然而,在XML中无望,因为XML   以两种方式限制一般情况:   假设每个实现   仅支持一组有限的字符   编码和XML编码   声明受到限制   和内容,以使其成为现实   可以自动检测角色   在每个实体中使用的编码   正常情况。

http://www.w3.org/TR/2000/REC-xml-20001006#sec-guessing

答案 1 :(得分:1)

编码名称限于([A-Za-z0-9._] |' - '),因此对于基于ASCII或ISO-646的任何编码都是相同的(例如ISO 8859- *,ISO 10646 / Unicode)的

编辑:但仍有一些含糊之处。例如,您仍然需要知道是否尝试一次读取8位,16位或32位块来读取它。还有一个小的细节是适当的UTF-16或UTF-32 / UCS-4文件,它应该以BOM开头 - 但XML规范似乎不允许包含BOM。 ..

但是,如果您知道该文件应该包含XML,那么您就可以很好地了解文件需要的启动方式,因此很容易检测出错误的猜测。

答案 2 :(得分:0)

对于HTML,它在HTML5中有记录。 (不过,如果你仍然认为网上的任何内容都是健全的,请不要阅读。)

相关问题