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

BeautifulSoup4调用prettify时西里尔字符异常转码如何解决

解决方案

问题根因

  • 当prettify传入formatter='html'时,BeautifulSoup4默认的HTML格式化器会将所有非ASCII字符转换为对应的HTML实体,因此西里尔字符会被转义为Пр这类编码
  • 不指定formatter参数时,默认格式化器会将 等空白实体直接转换为普通空格,无法保留原实体

实现方案

通过自定义HTML格式化器,即可同时实现三个需求:保留西里尔等非ASCII字符、保留 实体、正常格式化HTML结构。

完整代码示例

from bs4 import BeautifulSoup
from bs4.formatter import HTMLFormatter

# 构造自定义格式化器:仅保留 实体,其余非ASCII字符不转义
custom_formatter = HTMLFormatter(
    # 定义需要保留的HTML实体映射,仅添加需保留的 即可
    entity_defs={'nbsp': '\xa0'},
    # 关闭非ASCII字符自动转实体的逻辑
    convert_charrefs=False
)

# 测试用例,同时包含西里尔字符和 
hello = '<span>Привет, мир&nbsp;!</span>'
soup = BeautifulSoup(hello, 'html.parser')

# 调用prettify时传入自定义格式化器
pretty_html = soup.prettify(formatter=custom_formatter)
print(pretty_html)

输出效果

<span>
 Привет, мир&nbsp;!
</span>

扩展说明

如果需要保留其他HTML实体(比如&amp;、&lt;),只需在entity_defs字典中添加对应映射即可,例如:

entity_defs={
    'nbsp': '\xa0',
    'amp': '&',
    'lt': '<',
    'gt': '>'
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:24:07