【发布时间】:2014-02-17 02:51:02
【问题描述】:
假设我有一个存储在远程计算机上的 XML 文件。我不知道这个文件是如何保存的。 (使用了什么编码)。
我想读取这个文件并对那个 XML 文件做一些操作。
但后来我想:好的,如何如果我不知道分析硬盘驱动器上的字节,我将能够从 <?xml version="1.0" encoding="xxxxx"?> 读取 encoding 部分。 .
在discussion with Jon 之后,我被告知可以在 UTF-8 和 UTF-16 之间自动推断编码,而这些是 XML 规范规定的唯一可以省略的编码。
这让我问:其他编码呢?如果该 XML 保存在 encoding-lala 中,我怎么知道它?
正如 Jon 提到我的 w3c 文章 - 我确实找到了 answer:
XML 编码声明用作每个内部标签 实体,指示正在使用的字符编码。 之前 XML 处理器可以读取内部标签,但是,它显然 必须 知道正在使用什么字符编码——这就是内部的 标签试图表明。
它通过:
因为每个 XML 实体都没有附带外部编码 信息而不是 UTF-8 或 UTF-16 编码必须以 XML 开头 编码声明,其中第一个字符必须是
<?xml, 任何符合要求的处理器都可以检测到,经过两到四个八位字节 输入,以下哪种情况适用。在阅读这份清单时, 可能有助于知道在 UCS-4 中,<是#x0000003C和?是#x0000003F,UTF-16 数据流所需的字节顺序标记是#xFEFF。
所以它确实使用启发式方法通过尝试获取适当的<?xml 字符串来获取编码。
另一个有用的信息是encoding 声明的结构:
注意正则表达式,(基本 ascii 0..127)字符和 encoding 字。
所以这是我的问题:
即使它保存为 utf-8/16/blabla - 它成功使用第一个字节识别编码(启发式与否)。
如果是这样,为什么还需要<?xml version="1.0" encoding="xxxxx"?>?
【问题讨论】:
-
@Tomalak 和那些 ascii 字符,它们保存在哪种编码中?请参阅此处的表格w3.org/TR/xml/#sec-guessing。 (也请阅读我与 Jon 的讨论)。
-
我现在明白你的问题了,忘记我的评论。
标签: html .net xml parsing encoding