为什么需要XML编码?

3

我对XML有基本的了解。我的问题是,为什么需要在XML文档开头提到使用的编码,以及为什么需要编码?


相关问题:https://dev59.com/y2435IYBdhLWcg3w3EIi - Akram Berkawy
2个回答

3

虽然不是必需的,但通常您可能希望包含它:

在缺乏外部字符编码信息(例如 MIME 标头)的情况下,存储在除 UTF-8 或 UTF-16 以外的编码中的解析实体必须以包含编码声明的文本声明(请参见 4.3.1 文本声明)开头。

所以,例如,在通过 HTTP 传输 XML 时,XML 解析器可能会使用 Content-Type 标头的值,如下所示:

Content-Type application/xml; charset=UTF-8

但是一旦这个文档被本地存储,它就不会包含这些信息 - 因此将编码包括在XML文档的声明部分似乎是一个好主意。


VersionInfo 不同,BNF语法符号中的 EncodingDecl 并不是可选的。请参见:https://www.w3.org/TR/REC-xml/#sec-TextDecl。 - K3---rnc

1
为什么需要在XML文档开头提及使用的编码方式并非必须,因为有默认值(UTF-8和UTF-16),可以通过编程可靠地区分。为什么需要编码呢?因为计算机只能理解二进制。编码是将字母、数字等转换成二进制的过程,以便计算机进行处理。不同的编码方式以不同的方式存储字符。

这意味着我不需要在 <?xml 标签中提及编码吗? - AmritaS
1
@Quentin,这是真的吗?从规范来看:`TextDecl ::= '<?xml' VersionInfo? EncodingDecl S? '?>' - 我认为只有当整个XML声明被省略时,EncodingDecl才可以被省略。 - kamituel
@AmritaS,<?xml 不是标签本身,它是一个 XML 声明。 - kamituel
@Quentin 版本属性也可以省略吗? - AmritaS
@Quentin 当XML声明可以省略的时候,有必要使用它吗?我认为如果缺少XML声明,解析器会抛出一些错误..不太确定... - AmritaS
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接