XML声明编码

  • 本文关键字:编码 声明 XML xml
  • 更新时间 :
  • 英文 :


它到底是做什么的?在我最基本的理解层面上,XML只是一种格式化的文本。因此不涉及二进制<->文本转换。

我高度怀疑UTF-8和ASCII编码之间的唯一区别是,ASCII编码将使XML编写人员更加努力地将所有非ASCII字符转换为XML实体,而不仅仅是保留XML字符。所以ASCII编码的XML仍然可以包含UTF-8字符,只是它会稍微长一点,难看一点。

还是有其他的功能?

更新:

我完全理解如何通过编码将单个字符转换为字节。然而,XML只是文本标记,并没有这样做。

问题真的是为什么XML编码值存储在XML?或者,在什么情况下,XML阅读器需要知道特定XML文档使用了哪种编码?

参见XML规范的附录F, "字符编码的自动检测"。

特别是,"XML编码值存储在XML中",因为在默认情况下,XML处理器必须假定内容是UTF-16或UTF-8格式的,在XML文档之外没有发现外部元数据。XML声明是为不存在这种元数据的情况而设计的。

XML处理编码的另一个优点是,XML处理器只支持两种编码,即UTF-8和UTF-16。如果处理器发现了,无论是在外部元数据中还是在XML声明中,都表明文档是在一种编码中如果它不支持,它可能会比继续读取文档(长)更快地失败在声明之后),并遇到一个意外的字节序列用于编码使用依赖于实现的启发式方法检测。

我强烈,强烈推荐阅读《每个软件开发人员绝对,肯定必须知道的关于Unicode和字符集的绝对最低限度》(没有借口!)。您说XML"只是文本",好像这使一切都变得简单,但即使知道它是文本而不是一些结构化的二进制格式,也不意味着您确切地知道如何读取它或其中有什么字符。

这不是一个"去阅读手册!"的回答,我相信建立文本的难度基线将有助于解释XML声明存在的原因。

为什么XML声明首先需要编码?

这是本文讨论的思想之一,但在这里值得强调:所有文本都有编码。没有所谓的"纯文本"。ASCII 一种编码,即使我们大多数时候不考虑它。从历史上看,我们经常把头埋在沙子里,假设一切都是ASCII,但这在今天是不可行的。的年龄。XML声明的编码可以帮助我们,其中.txt文件没有任何指示其编码是什么。

是的,XML文件是一个文本文件,即一个字符序列。文件是一个字节序列。那么如何对单个字符进行编码,即转换为字节序列?有几种方法可以将字符编码为字节;"encoding"声明指示使用哪一个。

因此,"encoding"声明起着非常重要的作用:绝对需要知道用于读取文件中的字符的编码。如果没有指定编码,XML有一组默认编码,这取决于是否存在"字节顺序标记"(BOM)。如果没有BOM编码,默认编码为UTF-8。

ASCII是最简单的编码形式之一。它只能表示128个基本拉丁字符。UTF-8更精细;它可以表示所有的Unicode字符集。你是对的,如果你使用ASCII,你就必须使用XML实体来表示Unicode中存在而ASCII中不存在的大量字符

最新更新