Xml version = “1.0”coding = “ utf-8”? > 的含义

我是 XML 的新手,我正试图理解基础知识。我读了下面“学习 XML”一行,但对我来说还不清楚。有没有人能给我一本书或一个网站,清楚地解释这些基本知识?

来自 学习 XML:

XML 声明描述了 文档,告诉 XML 处理器它需要一个 XML 解析器来 解释这份文件。

这是什么意思?

我理解 xml version的部分-doc 和 doc 的用户应该在相同的 XML 版本中“对话”。那 encoding呢?有必要吗?

650831 次浏览

这是 XML 可以选择的序言。

  • version="1.0"意味着这是该文件符合的 XML 标准
  • encoding="utf-8"意味着使用 UTF-8 Unicode 编码对文件进行编码

编码声明标识用于哪种编码 表示文档中的字符。

更多有关 XML 声明的资料,请浏览: http://msdn.microsoft.com/en-us/library/ms256048.aspx

并非所有 XML 文档都需要 XML 声明; 但是强烈建议 XHTML 文档作者在所有文档中使用 XML 声明。当文档的字符编码不是默认的 UTF-8或 UTF-16,并且没有编码由更高级别的协议确定时,就需要这样的声明。下面是一个 XHTML 文档的示例。在此示例中,包括 XML 声明。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Virtual Library</title>
</head>
<body>
<p>Moved to <a href="http://example.org/">example.org</a>.</p>
</body>
</html>

Please refer to the W3 XML 标准.

文档结构图中的 XML 声明包括以下内容:

The version number, ?xml version="1.0"?.

This is mandatory. Although the number might change for future versions of XML, 1.0 is the current version.

编码声明,

encoding="UTF-8"?

这是可选的。如果使用,编码声明必须紧接在 XML 声明中的版本信息之后出现,并且必须包含一个表示现有字符编码的值。

有没有人能给我一本书或一个网站,清楚地解释这些基本知识?

您可以通过示例检查这个 XML 教程

但是编码的部分呢? 为什么有这个必要?

W3C 提供有关编码的 解释:

”XML 和 HTML 4.0的文档字符集是 Unicode (又名 ISO) 这意味着 HTML 浏览器和 XML 处理器应该表现良好 as if they used Unicode internally. But it doesn't mean that documents 只要客户端和服务器同意,就必须使用 Unicode 进行传输 在编码上,它们可以使用任何可以转换为 Unicode...”

To understand the "encoding" attribute, you have to understand the difference between 字节 and 角色.

可以将字节看作0到255之间的数字,而字符则是“ a”、“1”和“ Ä”之类的字符。可用的所有字符集称为 字符集

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

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

例如,ASCII 字符集中有6个字符,由值60到65表示。

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

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

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

Over time a lot of encodings have been created. In the Windows world, there is CP1252, or ISO-8859-1, whereas Linux users tend to favour UTF-8. Java uses UTF-16 natively [see comments].

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

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

可以将 XML 看作是字节序列而不是字符序列。

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

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

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

最后,version属性指定 XML 版本,目前有两个版本(参见 维基百科 XML 版本)。不同版本之间存在细微的差异,因此 XML 解析器需要知道它所处理的是什么。在大多数情况下(对于说英语的人来说) ,1.0版就足够了。