Skip to content

XML 编码

XML 文档是基于文本的,可以包含来自世界各地的各种语言字符(例如,英语、法语 éàç、日语 かな、俄语 Язык)。

为了确保这些字符能够正确存储、传输和解释,指定字符编码至关重要。

字符编码(或字符集 charset)定义了字符(如 ‘A’、’€’、‘猫’)与用于在计算机内存和文件中表示它们的字节序列之间的映射关系。

如果不知道正确的编码,软件可能会错误地解释字节,导致乱码 (mojibake) 或错误。

Unicode 标准是通用的字符编码标准。它旨在为现代计算中使用的每个字符分配一个唯一的数字(称为码点 code point)。

UTF-8(Unicode 转换格式 - 8位)是实现 Unicode 的最常见方式,尤其是在 Web 上用于存储和传输数据。

UTF-8 的主要特性:

  • 可变宽度:对基本拉丁字符(与 ASCII 兼容)使用 1 个字节,对其他字符最多使用 4 个字节。
  • 通用性:可以表示 Unicode 标准中的任何字符。
  • 广泛支持:它是 HTML5、JSON 的默认编码,并推荐用于 XML、JavaScript、Python 3 以及许多其他技术。
  • 对于主要使用英文的文本来说很高效,同时仍支持所有语言。

也存在其他 Unicode 编码,如 UTF-16,但它们在 Web 和一般文件交换中的使用不如 UTF-8 普遍。

推荐在 XML 声明(可选的第一行)中指定 XML 文档的编码:

<?xml version="1.0" encoding="UTF-8"?>

这明确地告诉 XML 解析器如何解释文件中的字节。

XML 标准要求:

  • 所有 XML 解析器都必须支持 UTF-8 和 UTF-16。
  • 如果省略 encoding 属性,解析器通常会假定为 UTF-8(或尝试基于字节顺序标记 BOM 进行自动检测,但依赖声明更安全)。
  • 虽然解析器可能支持其他编码(如 ISO-8859-1, Windows-1252),但使用 UTF-8 可以最大限度地提高兼容性。

编码问题通常在以下情况出现:

  • XML 文件以某种编码(例如 Windows-1252)保存,但声明却是另一种编码(例如 UTF-8)。
  • 编码声明缺失,并且实际编码不是 UTF-8。
  • 处理 XML 的软件(编辑器、服务器、浏览器、解析器)不遵循或未能正确处理指定的编码。
  • 数据在具有不同默认编码的系统之间传输。

由此产生的问题包括字符显示不正确(例如 ‘ü’ 显示为 ‘ü’)或致命的解析错误。

为避免 XML 编码问题:

  • 尽可能使用 UTF-8。 它是 Web 的事实标准,可以处理所有字符。
  • 始终在 XML 声明中声明编码: <?xml version="1.0" encoding="UTF-8"?>。
  • 确保你的编辑器使用声明的编码保存文件。 大多数现代编辑器都支持保存为 UTF-8。
  • 验证传输或接收 XML 的系统是否正确处理编码。 适当配置服务器和应用程序。