XML中文乱码的根本原因是声明编码与实际保存编码不一致,需确保XML声明、文件保存格式及程序读取时指定的编码三者严格统一,推荐使用UTF-8(无BOM)并同步修改声明为encoding="UTF-8"。
XML文件出现中文乱码,根本原因通常是声明的编码格式与实际保存的编码不一致。最常见的是文件用UTF-8保存,但XML声明写成了,或者反过来——声明是UTF-8,但文件实际是GBK编码。
打开XML文件(推荐用记事本、VS Code、Notepad++等可显示编码的编辑器),查看第一行是否类似:
然后确认该文件**真实保存的编码格式**是否与之匹配:
UTF-8是国际通用标准,兼容性最好,尤其适合含多种语言的XML。注意两点:
等异常字符
encoding="GBK"(部分解析器也认"GB2312",但GBK更稳妥)即使XML文件本身编码正确,代码里读取时没指定编码,仍会乱码。例如
:
FileInputStream读取时,应包装成InputStreamReader并传入"UTF-8"参数xml.etree.ElementTree.parse()时,建议先用open(file, encoding='utf-8')打开再解析Content-Type包含; charset=utf-8
改完后不要只看编辑器显示——有些编辑器会自动猜测编码并“美化”显示,造成假象。可靠方法:
file -i your.xml,Windows可用PowerShell的Get-Content -Encoding Byte看前几个字节基本上就这些。核心就一条:声明、保存、读取,三者编码必须完全一致。UTF-8(无BOM)是最省心的选择。