如果我正在阅读HTML文件的XML,那么我是否必须阅读告诉我能够读取文件的编码的标签?该标签的编码方式与文件的编码方式不同吗?我很好奇你如何在不了解编码的情况下阅读该标签。我意识到这是解决了问题。我很好奇它是如何完成的。
更新1
我不明白,在UTF-16中,每个角色不会占用2个字节,而不是一个,并且与ascii不同?例如,UTF-16(U + 0045)中的字符E是0xfeff0045。那是0xfeff然后是0x0045,但是一些编码会改变它的结尾。你是否必须通过检查0xfeff并发现它不能是ASCII或其他东西来解决这个问题?
答案 0 :(得分:6)
以下是W3C对此的评价:
XML编码声明函数 作为每个实体的内部标签, 指示哪个字符编码 正在使用。在XML处理器之前可以 但是,阅读内部标签 显然必须知道什么性格 编码正在使用 - 这是什么 内部标签试图表明。 在一般情况下,这是一个 无望的情况。这不完全是 然而,在XML中无望,因为XML 以两种方式限制一般情况: 假设每个实现 仅支持一组有限的字符 编码和XML编码 声明受到限制 和内容,以使其成为现实 可以自动检测角色 在每个实体中使用的编码 正常情况。
答案 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中有记录。 (不过,如果你仍然认为网上的任何内容都是健全的,请不要阅读。)