首页 文章

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

提问于
浏览
70

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

从学习XML:

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

这是什么意思?

我理解 xml version 部分 - 文档和doc的用户应该在同一版本的XML中使用"talk" . 但是 encoding 部分怎么样?为什么这有必要?

6 回答

  • 96

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

    版本号,?xml version =“1.0”?

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

    编码声明,

    encoding =“UTF-8”?

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

  • -1

    这是XML可选的前导码 .

    • version="1.0" 表示这是此文件符合的XML标准

    • encoding="utf-8" 表示使用UTF-8 Unicode编码对文件进行编码

  • 3

    有人能指出我的书或网站,清楚地解释这些基础知识吗?

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

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

    W3C提供了关于编码的explanation

    “XML和HTML 4.0的文档字符集是Unicode(又名ISO 10646) . 这意味着HTML浏览器和XML处理器的行为应该像在内部使用Unicode一样 . 但这并不意味着文档必须以Unicode格式传输只要客户端和服务器就编码达成一致,他们就可以使用任何可以转换为Unicode的编码......“

  • 3

    要理解"encoding"属性,您必须了解字节和字符之间的区别 .

    将字节视为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就足够了 .

  • 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 .

  • 18

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

    更多关于 XML Declaration 这里:http://msdn.microsoft.com/en-us/library/ms256048.aspx

相关问题