XML 编码
XML 字符编码
Section titled “XML 字符编码”XML 文档是基于文本的,可以包含来自世界各地的各种语言字符(例如,英语、法语 éàç、日语 かな、俄语 Язык)。
为了确保这些字符能够正确存储、传输和解释,指定字符编码至关重要。
什么是字符编码?
Section titled “什么是字符编码?”字符编码(或字符集 charset)定义了字符(如 ‘A’、’€’、‘猫’)与用于在计算机内存和文件中表示它们的字节序列之间的映射关系。
如果不知道正确的编码,软件可能会错误地解释字节,导致乱码 (mojibake) 或错误。
Unicode 和 UTF-8
Section titled “Unicode 和 UTF-8”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 中指定编码
Section titled “在 XML 中指定编码”推荐在 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 可以最大限度地提高兼容性。
潜在的编码问题
Section titled “潜在的编码问题”编码问题通常在以下情况出现:
- XML 文件以某种编码(例如 Windows-1252)保存,但声明却是另一种编码(例如 UTF-8)。
- 编码声明缺失,并且实际编码不是 UTF-8。
- 处理 XML 的软件(编辑器、服务器、浏览器、解析器)不遵循或未能正确处理指定的编码。
- 数据在具有不同默认编码的系统之间传输。
由此产生的问题包括字符显示不正确(例如 ‘ü’ 显示为 ‘ü’)或致命的解析错误。
为避免 XML 编码问题:
- 尽可能使用 UTF-8。 它是 Web 的事实标准,可以处理所有字符。
- 始终在 XML 声明中声明编码:
<?xml version="1.0" encoding="UTF-8"?>。 - 确保你的编辑器使用声明的编码保存文件。 大多数现代编辑器都支持保存为 UTF-8。
- 验证传输或接收 XML 的系统是否正确处理编码。 适当配置服务器和应用程序。