在处理(反序列化)XML文件时,我对XML编码有疑问。 我们在文件开头指定XML文件的编码方式如下。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
我的问题是,程序读取这一行后,便确定接下来的内容采用UTF-8编码。但在读取第一行时,程序如何确定它采用的是UTF-8编码呢?我的意思是,在读取字节流的同时,程序如何知道它需要使用哪种编码来读取第一行?
谢谢, Mayuran
在xml规范的F.1节中写道:
F.1无外部编码信息的检测
因为每个没有外部编码信息且不以UTF-8或UTF-16编码的XML实体必须以XML编码声明开头,在其中第一个字符必须是
<?xml
,任何符合规范的处理器都可以在输入两到四个八位组后检测出以下哪种情况适用。阅读此列表时,可能有助于知道在UCS-4
中,<
是#x0000003C
,?
是#x0000003F
,并且UTF-16
数据流所需的字节顺序标记是#xFEFF
。符号##用于表示除两个连续的##不能同时为00之外的任何字节值。
基本上,有两个选择:
规范随后明确记录了特定八位字节流的表格,处理器应使用这些表格来确定要使用的编码,直到看到encoding
声明。