Python解析XML生成HTML时重音字符编码乱码如何解决
问题根因
你定位的问题位置错误,乱码和XML读取逻辑无关,问题出在输出HTML文件的打开逻辑:
你调用open("generatedHTML.html", "w")时没有显式指定编码,Python 3的open函数在文本模式下默认使用操作系统的默认编码(Windows环境下通常为GBK/CP1252),导致你从XML中读取到的正确UTF-8重音字符,写入HTML时被错误编码,最终出现乱码。
修复方案
只需要修改输出HTML文件的打开语句,显式指定UTF-8编码即可:
# 原代码 f = open("generatedHTML.html", "w") # 修改为 f = open("generatedHTML.html", "w", encoding="utf-8")
可选优化建议
- 可以省去手动打开XML文件的步骤,直接把文件路径传给
ET.parse,让ElementTree自动读取XML头部的编码声明进行解析,避免手动指定编码和XML实际编码不符的问题:
# 原代码 with open(archivoXML, 'r', 1, 'utf-8') as xml_file: arbol = ET.parse(xml_file) # 可替换为 arbol = ET.parse(archivoXML)
- 写入HTML的用户生成内容建议先经过
html.escape转义,避免特殊字符破坏HTML结构或者出现注入风险:
import html f.write('\t\t<p> Persona: ' + html.escape(hijo.attrib['nombre']) + ' ' + html.escape(hijo.attrib['apellido']) + '</p>\n')
内容的提问来源于stack exchange,提问作者diegogs_
相关产品推荐
相关产品推荐

