XDocument.Load解析无编码头XML文件时默认采用何种编码?
关于XDocument.Load解析无编码头XML的默认编码问题
好问题!我之前也深究过这个细节,刚好能给你明确答案:
当你使用XDocument.Load()加载未包含<?xml version="1.0" encoding="..."?>编码声明的XML文件时,底层依赖的XmlReader会严格遵循XML规范来确定解析编码,规则如下:
- 首先检查文件开头的字节顺序标记(BOM):
- 如果存在UTF-8的BOM(字节序列EF BB BF),则使用UTF-8解析;
- 如果存在UTF-16的BOM(FF FE或FE FF),则使用对应的UTF-16编码(大端或小端);
- 其他类型的BOM也会对应匹配相应的编码格式。
- 如果没有检测到任何BOM,则会默认采用UTF-8作为解析编码,而不是系统默认的ANSI(旧区域设置编码)。
需要补充的是:如果你的加载方式不是直接读取文件(比如通过TextReader传入),那么编码会由TextReader的配置决定,但针对直接加载文件的场景,上述规则完全适用。
内容的提问来源于stack exchange,提问作者Heinzi
相关产品推荐
相关产品推荐

