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


103

我是XML的新手,我试图了解基础知识。我在“学习XML”中阅读了下面的行,但是对我来说仍然不清楚。有人可以指向我清楚说明这些基础的书或网站吗?

通过学习XML

XML声明描述了文档的一些最常规属性,告诉XML处理器它需要XML解析器来解释该文档。

这是什么意思?

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



Answers:


126

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

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

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

大多数编码基于旧字符集和称为ASCII的编码,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中â由一个字节的value表示226,而在UTF-8中则由两个字节表示:195, 162。但是,在ISO 8859-1中195, 162将是两个字符Ã,¢

将XML视为不是字符序列而是字节序列。

想象一下,接收XML的系统看到了字节195, 162。它怎么知道这些是什么字符?

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

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

最后,该version属性指定XML版本,目前有两个版本(请参阅Wikipedia XML版本。版本之间存在细微差异,因此XML解析器需要知道它要处理的内容。在大多数情况下(英语)扬声器),那么1.0版就足够了。


9
“标头本身使用ASCII编码”:我认为您正在引用XML声明。它的编码方式与文档的其余部分相同;UTF-16或其他。XML处理器可以进行几次尝试,直到可以读取编码规范。
Tom Blodget 2014年

1
我的印象是,前导/序言将在UTF-8下进行编码,并告诉解析器如何将其余字节(实际的XML文档)转换为正确的编码。又错了!:-)
凯利·胡德

5
这是一个推荐阅读:joelonsoftware.com/2003/10/08/...
Sudip班达

26

并非所有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 XML标准


4
xml链接到xhtml。您是要链接到xml w3.org/TR/xml,还是要为链接命名为xhtml?
jrwren

xhtml是指xml文档。格式良好的xml不需要文档类型声明。
xvan

“请参考W3 XML标准。” IOW,去阅读faqing常见问题,这是一个很长的文件。人们为什么不能简单地解释“什么”呢?会和为什么在那里???
Blessed Geek

3

这是XML 可选的前导。

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


2

有人可以指向我清楚说明这些基础的书或网站吗?

您可以通过示例查看此XML教程

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

W3C提供了有关编码的说明

“ XML和HTML 4.0的文档字符集是Unicode(即ISO 10646)。这意味着HTML浏览器和XML处理器应表现得好像它们在内部使用Unicode一样。但这并不意味着文档必须以Unicode传输。只要客户端和服务器就编码达成协议,他们就可以使用任何可以转换为Unicode的编码...”


-1

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

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

这是强制性的。尽管该数字可能会随XML的将来版本而更改,但1.0是当前版本。

编码声明,

encoding="UTF-8"?

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.