xml - - <?xml version ="1.0"encoding ="utf-8"?> 的含义

标签 xml character-encoding xml-declaration xml-encoding

我是 XML 的新手,我正在尝试了解基础知识。我在“学习 XML”中阅读了下面的行,但对我来说仍然不清楚。谁能告诉我清楚地解释这些基础知识的书籍或网站?

来自学习 XML:

The XML declaration describes some of the most general properties of the document, telling the XML processor that it needs an XML parser to interpret this document.

这是什么意思?

我了解 xml version 部分 - doc 和 doc 的用户都应该使用相同版本的 XML “交谈”。但是 encoding 部分呢?为什么有必要?

最佳答案

要了解“编码”属性,您必须了解字节字符 之间的区别。

将字节视为 0 到 255 之间的数字,而字符是诸如“a”、“1”和“Ä”之类的东西。所有可用字符的集合称为字符集

每个字符都有一个或多个用于表示它的字节序列;但是,字节的确切数量和值取决于所使用的编码,并且有许多不同的编码。

大多数编码都基于旧的字符集和称为 ASCII 的编码,每个字符一个字节(实际上只有 7 位)并且包含 128 个字符,其中包括美国英语中使用的许多常用字符。

例如,这里有6个字符在ASCII字符集中用值60到65表示。

Extract of ASCII Table 60-65
╔══════╦══════════════╗
║ Byte ║  Character   ║
╠══════╬══════════════║
║  60  ║      <       ║
║  61  ║      =       ║
║  62  ║      >       ║
║  63  ║      ?       ║
║  64  ║      @       ║
║  65  ║      A       ║
╚══════╩══════════════╝

在完整的 ASCII 集中,使用的最低值是零,最高值是 127(这两个都是隐藏的控制字符)。

但是,一旦您开始需要比基本 ASCII 提供的字符更多的字符(例如,带重音符号的字母、货币符号、图形符号等),ASCII 就不合适了,您需要更广泛的东西。您需要更多字符(不同的字符集)并且需要不同的编码,因为 128 个字符不足以容纳所有字符。一些编码提供一个字节(256 个字符)或最多六个字节。

随着时间的推移,已经创建了许多编码。在 Windows 世界中,有 CP1252 或 ISO-8859-1,而 Linux 用户倾向于使用 UTF-8。 Java 原生使用 UTF-16 [查看评论]。

一种编码中的字符的一个字节值序列可能代表另一种编码中的完全不同的字符,甚至可能是无效的。

例如,在 ISO 8859-1 中,â 由一个字节值 226 表示,而在 UTF-8 中它是两个字节:195, 162 .然而,在 ISO 8859-1 中,195, 162将是两个字符,Ã, ¢

将 XML 视为字节序列而非字符序列。

假设接收 XML 的系统看到字节 195, 162 .它如何知道这些是什么字符?

为了让系统将这些字节解释为实际字符(并因此显示它们或将它们转换为另一种编码),它需要知道 XML 中使用的编码。

由于大多数常见编码都与 ASCII 兼容,就基本字母字符和符号而言,在这些情况下,声明本身可以仅使用 ASCII 字符来说明编码是什么。在其他情况下,解析器必须尝试找出声明的编码。因为它知道声明以 <?xml 开头这样做要容易得多。

最后,version属性指定 XML 版本,目前有两个版本(请参阅 Wikipedia XML versions 。版本之间存在细微差别,因此 XML 解析器需要知道它正在处理什么。在大多数情况下(对于说英语的人来说) , 1.0 版本就足够了。

关于xml - - <?xml version ="1.0"encoding ="utf-8"?> 的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13743250/

相关文章:

html - 使用xpath获取html元素的文本内容

java - 如何使用 Java 将 XML 中的一个标签替换为另一个标签?

xml - 如何使用xpath在xml中查找数字数据类型信息

python - Pipreq : UnicodeDecodeError: 'charmap' codec can't decode byte 0x98 in position 1206: character maps to <undefined>

xml - 在 XSLT 1.0 中用前导零填充数字

java - 为什么 DataOutputStream.writeChars(str) 和 String(byte[]) 不使用相同的编码?

utf-8 - 如何强制唯一区分全破折号和短破折号?

python - 如何使用 xml.etree.ElementTree 将 "standalone="yes"添加到 XML 声明

python - 检查 XML 声明是否存在