含义 - <! - ?xml version =“1.0”encoding =“utf-8”? - >

时间:2012-12-06 12:03:57

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

我是XML的新手,我正在尝试理解基础知识。我在“学习XML”中读到了以下这一行,但对我来说仍然不太清楚。有人能指出我的书或网站,清楚地解释这些基础知识吗?

来自学习XML

  

XML声明描述了一些最常见的属性   该文档告诉XML处理器它需要一个XML解析器   解释这份文件。

这是什么意思?

我理解xml version部分 - doc的doc和user都应该在同一版本的XML中“对话”。但是encoding部分怎么样?为什么这有必要?

6 个答案:

答案 0 :(得分:106)

要理解“encoding”属性,您必须了解 bytes 字符之间的区别。

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

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

大多数编码都基于一个旧的字符集和称为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个字符)或最多六个字节。

随着时间的推移,已经创建了很多编码。在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就足够了。

答案 1 :(得分:19)

所有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>

请参阅W3 standards for XML

答案 2 :(得分:3)

这是XML 可选前言。

  • version="1.0"表示这是此文件符合
  • 的XML标准
  • encoding="utf-8"表示文件使用UTF-8 Unicode编码
  • 进行编码

答案 3 :(得分:3)

  

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

有关 XML声明的更多信息,请访问:http://msdn.microsoft.com/en-us/library/ms256048.aspx

答案 4 :(得分:2)

  

有人可以指向一本能够清楚解释这些基础知识的书籍或网站吗?

您可以通过示例查看此XML Tutorial

  

但编码部分怎么样?为什么这有必要?

W3C提供有关编码的explanation

  

&#34; XML和HTML 4.0的文档字符集是Unicode(又名ISO   10646)。这意味着HTML浏览器和XML处理器应该表现出来   好像他们在内部使用Unicode。但它并不代表文件   必须以Unicode传输。只要客户和服务器都同意   在编码上,他们可以使用任何可以转换的编码   的Unicode ...&#34;

答案 5 :(得分:-1)

文档图中的XML声明包含以下内容:

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

这是强制性的。尽管未来版本的XML可能会更改数量,但1.0是当前版本。

编码声明,

encoding="UTF-8"?

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