它实际上做了什么?在我的基本理解水平上,XML只是一种格式化的文本。因此,不涉及二进制< - >文本转换。
我非常怀疑UTF-8和ASCII编码之间的唯一区别是ASCII编码会使所有非ASCII字符转换为XML实体而不仅仅是保留的XML字符,从而使XML编写器更加困难。所以ASCII编码的XML仍然可以包含UTF-8字符,除了它会稍微长一点且更加丑陋。
或者还有其他功能吗?
更新
我完全理解如何通过编码将单个字符转换为字节。然而,XML只是文本标记,而且没有任何意义。
问题究竟是为什么XML编码值存储在XML中?或者XML读者需要知道哪种编码用于任何特定的XML文档?
答案 0 :(得分:8)
参见XML规范中的附录F“Autodetection of Character Encodings”。
特别是,“XML编码值存储在XML中”,因为默认情况下,XML处理器必须假定内容是UTF-16或UTF-8,缺少在XML文档之外找到的外部元数据。 XML声明适用于不存在此类元数据的情况。
XML处理编码的另一个优点是这样一种XML处理器 只需要支持两种编码,即UTF-8和UTF-16。如果处理器发现, 无论是在外部元数据中还是在XML声明中,文档都处于编码状态 它不支持,它可能比它继续阅读文件更早失败(很长时间 在声明之后)并遇到编码的意外字节序列 使用依赖于实现的启发式检测。
答案 1 :(得分:4)
我非常高兴,强烈推荐阅读The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)。你说XML就是“只是文本”,就好像它使一切变得简单,但即使知道它的文本而不是一些结构化的二进制格式并不意味着你确切地知道如何阅读它或者其中的字符。
这不是“去看手册!”回答,我相信在文本有多困难的基础上建立这个基线将有助于解释为什么XML声明存在。
为什么XML声明首先需要编码?
这是本文中提到的一个想法,但值得强调的是:所有文本都有编码。没有“纯文本”这样的东西。 ASCII 是一种编码,即使我们大多数时候都没有考虑过它。从历史上看,我们经常把目光投向沙子并假设一切都是ASCII,但这在今天是不可行的。年龄。 XML声明的编码可以帮助我们解决问题,其中.txt文件没有任何内容可以指示其编码是什么。
答案 2 :(得分:2)
是的,XML文件是文本文件,即一系列字符。文件是bytes的序列。那么如何编码单个字符,即转换成字节序列?有几种方法可以将字符编码为字节; “encoding”声明表示使用了哪一个。
因此,“encoding”声明起着非常重要的作用:一个绝对需要知道哪个编码只能从文件中读取字符。如果未指定编码,则XML具有一组默认编码,具体取决于是否存在“字节顺序标记”(BOM)。如果没有BOM,则默认编码为UTF-8。
ASCII是最简单的编码形式之一。它只能代表128个基本拉丁字符的范围。 UTF-8更精细;它可以代表所有Unicode字符集。所以你是对的,如果你使用的是ASCII,你就不得不使用XML实体来表示Unicode中存在的大量字符,而不是ASCII中的字符。