You need to enable JavaScript to run this app. Python结合BeautifulSoup读取本地HTML源代码出现乱码问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Python结合BeautifulSoup读取本地HTML源代码出现乱码问题求助

异常根因
  • 输出开头出现的ÿþ是UTF-16小端序编码的字节顺序标记(BOM),对应从Word导出的HTML文件实际以UTF-16 LE格式存储,并非常见的UTF-8/ASCII编码。
  • 代码中open(file_path)采用无显式编码的默认打开逻辑,在Windows环境下会依托系统本地编码(如cp1252、cp936)解码文件,没有按照UTF-16的规则将连续两个字节拼接为一个完整字符,反而将每个字符的高低位字节拆解为独立单字节字符解码,直接造成英文字母间无故出现空格、开头携带乱码的现象。
  • 解码得到的碎片化内容无法被BeautifulSoup识别为正常HTML结构,整段乱码会被当作纯文本处理,自动套入默认的<HTML><BODY><P>文档骨架,原有的尖括号也会被转义为&gt;实体,最终输出完全不符合预期的内容。
解决方法
  • 打开本地文件时,显式指定与文件实际存储匹配的编码参数,覆盖系统默认的打开逻辑。调整后的可运行代码如下:
from bs4 import BeautifulSoup

file_path = "本地HTML文件的实际路径"
# 指定utf-16编码,Python会自动识别文件开头的BOM标记完成正确解码
with open(file_path, encoding="utf-16") as fp:
    # 显式指定html.parser解析器,规避默认解析器的兼容警告
    soup = BeautifulSoup(fp, "html.parser")

print(soup.prettify())
  • 优化提示:
    • 若不确定文件的实际编码,可先读取文件原始字节,配合编码检测工具识别编码值后再传入open函数的encoding参数,避免编码错配。
    • 从Word导出的HTML包含大量冗余的样式、脚本标签,解析过程中可调用节点的decompose()方法过滤<style>、<script>等无关节点,减少后续内容提取时的噪音。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 12:24:06