XML中文乱码主因是声明编码与实际保存编码不一致,需统一XML声明encoding值与文件真实编码,用编辑器另存为UTF-8(推荐无BOM),程序解析时也须显式指定对应编码。

XML文件出现中文乱码,绝大多数是因为声明的编码格式与实际保存的编码不一致,最常见的是文件以UTF-8保存,但XML声明写成了,或压根没写encoding属性。
检查并统一XML声明与文件实际编码
打开XML文件(推荐用记事本、VS Code、Notepad++等能显示编码的编辑器),确认两件事:
- 文件顶部是否有
声明; - 该声明中的
encoding值(如UTF-8、GBK、ISO-8859-1)是否与文件当前真实编码一致。
例如:若用VS Code打开显示右下角是“UTF-8”,但XML头写的是encoding="GBK",就必须改成encoding="UTF-8";反之亦然。修改后务必保存。
用文本编辑器正确另存为UTF-8(带BOM或无BOM)
很多乱码源于编辑器默认保存为ANSI(Windows下常为GBK),而非UTF-8。解决方法:
本文档主要讲述的是Android的资源与国际化设置;资源是外部文件(不含代码的文件),它被代码使用并在编译时编入应用程序。Android支持不同类型的资源文件,包括XML,PNG以及JPEG文件XML文件根据描述的不同有不同格式。这份文档描述可以支持什么样的文件,语法,以及各种格式。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
- 在Notepad++中:菜单栏「编码」→ 选择「转为UTF-8」或「转为UTF-8-BOM」→ 再「文件」→「保存」;
- 在VS Code中:右下角点击编码名称(如“GBK”)→ 选「Save with Encoding」→ 选「UTF-8」;
- 避免仅用Windows记事本另存——它保存UTF-8时默认加BOM,某些解析器可能报错,建议优先选“UTF-8无BOM”。
程序读取时显式指定编码(关键补充)
即使XML文件本身编码正确,如果解析程序没按声明的encoding读取,仍会乱码。例如:
- Java中用
DocumentBuilder时,应确保输入流用InputStreamReader指定UTF-8; - Python用
xml.etree.ElementTree.parse()时,推荐先用open(file, encoding='utf-8')读取字符串再解析; - 浏览器直接打开本地XML文件,若无HTTP头,会依赖XML声明——此时声明必须准确且文件编码匹配。
验证是否真正解决
改完后,用以下方式交叉验证:
- 用不同编辑器(如VS Code + Notepad++)打开,看中文是否都正常显示;
- 用浏览器打开XML文件,观察是否报错或显示方块/问号;
- 在命令行用
file -i filename.xml(Linux/macOS)或PowerShell中Get-Content filename.xml -Encoding UTF8测试读取是否成功。
不复杂但容易忽略









