【问题标题】:Meaning of - <?xml version="1.0" encoding="utf-8"?>- <?xml version="1.0" encoding="utf-8"?> 的含义
【发布时间】:2012-12-06 12:03:57
【问题描述】:

我是 XML 新手,我正在尝试了解基础知识。我在“Learning XML”中阅读了下面的行,但对我来说仍然不清楚。有人能指点我看清楚解释这些基础知识的书或网站吗?

来自学习 XML

XML 声明描述了一些最通用的属性 文档,告诉 XML 处理器它需要一个 XML 解析器来 解读这份文件。

这是什么意思?

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

【问题讨论】:

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


【解决方案1】:

要了解“编码”属性,就必须了解bytescharacters的区别。

将字节视为 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 集合中,使用的最低值是 0,最高的是 127(这两个都是隐藏的控制字符)。

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

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

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

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

把 XML 看作不是一个字符序列,而是一个字节序列。

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

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

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

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

【讨论】:

  • “标头本身使用 ASCII 编码”:我认为您指的是 XML 声明。它像文档的其余部分一样被编码; UTF-16 之类的。 XML 处理器可以进行一些试验,直到它可以读取编码规范。
  • 我的印象是序言/序言将在 UTF-8 下编码,并告诉解析器如何将剩余的字节(实际的 XML 文档)转换为正确的编码。又错了! :-)
  • 自从 Java 9 紧凑字符串 (JEP 254) 以来,“Java 原生使用 UTF-16”不再是这种情况。
【解决方案2】:

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

【讨论】:

  • 那个 xml 链接到 xhtml。您的意思是链接到 xml w3.org/TR/xml 还是您的意思是将链接命名为 xhtml?
  • xhtml 指的是 xml 文档。格式正确的 xml 不需要文档类型声明。
  • "XML 请参考W3 标准。" IOW,去阅读faqing faq,很长很长的文档。为什么人们不能简单地解释“?”是什么?确实存在,为什么存在???
【解决方案3】:

这是 XML 可选序言。

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

【讨论】:

    【解决方案4】:

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

    更多关于 XML 声明的信息在这里:http://msdn.microsoft.com/en-us/library/ms256048.aspx

    【讨论】:

      【解决方案5】:

      谁能给我指出一本清楚解释这些基础知识的书或网站?

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

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

      W3C 提供explanation 关于编码:

      "XML 和 HTML 4.0 的文档字符集是 Unicode(又名 ISO 10646)。这意味着 HTML 浏览器和 XML 处理器应该运行 好像他们在内部使用 Unicode。但这并不意味着文件 必须以 Unicode 传输。只要客户端和服务器同意 在编码上,他们可以使用任何可以转换为的编码 统一码……”

      【讨论】:

        【解决方案6】:

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

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

        这是强制性的。尽管对于 XML 的未来版本,该数字可能会发生变化,但 1.0 是当前版本。

        编码声明,

        encoding="UTF-8"?
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-12-18
          相关资源
          最近更新 更多