You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何转换含HTML实体的XML,正常显示特殊字符ñ

解决Python转换带HTML实体的XML问题

嘿,这个问题我之前帮朋友处理过,本质就是把那些被拆成HTML实体的UTF-8字节还原成正确的字符。下面给你两种实用的实现方式,都能得到你想要的结果:

方法一:直接处理字符串

这种方式适合快速处理单个XML字符串,步骤很清晰:

  1. 先用html.unescape把HTML实体转换成对应的字符;
  2. 再通过编码转换把这些字符还原成正确的UTF-8字符。

代码示例:

import html

# 你的原始XML内容
raw_xml = '<user> <name>mariap</name> <full-name>Maria Pe&#195;&#177;a</full-name> <uid>2007</uid> <class>super-user</class> </user>'

# 第一步:解析HTML实体,得到包含临时字符的字符串
unescaped_str = html.unescape(raw_xml)
# 第二步:将临时字符按latin-1编码为字节,再解码为UTF-8,还原出ñ
fixed_xml = unescaped_str.encode('latin-1').decode('utf-8')

# 输出结果
print(fixed_xml)

方法二:结合XML解析器处理

如果你的XML内容更复杂,需要后续操作XML节点,这种方式更合适:先处理实体还原字符,再用XML解析器解析和输出。

代码示例:

import html
import xml.etree.ElementTree as ET

raw_xml = '<user> <name>mariap</name> <full-name>Maria Pe&#195;&#177;a</full-name> <uid>2007</uid> <class>super-user</class> </user>'

# 先还原HTML实体和UTF-8字符
unescaped_str = html.unescape(raw_xml)
fixed_content = unescaped_str.encode('latin-1').decode('utf-8')

# 解析XML并输出格式化内容
root = ET.fromstring(fixed_content)
ET.dump(root)

为什么这么做?

你看到的&#195;&#177;其实是ñ的UTF-8字节(0xC3和0xB1)被分别转换成了HTML实体。先用html.unescape得到对应的字符(Ã和±),再用latin-1编码把这些字符转回原始字节,最后解码成UTF-8就得到了正确的ñ。

内容的提问来源于stack exchange,提问作者Nitin Kr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 23:18:12