Python中如何将特定Unicode字符转为方块字符显示?
解决pandas.read_html抓取表格的字符乱码问题
原因分析
你遇到的是字符编码不匹配导致的乱码(Mojibake):网页中的特殊字符█(U+2588)和▀(U+2580)的UTF-8字节序列(\xe2\x96\x88和\xe2\x96\x80)被pandas用错误的编码(比如Windows-1252/ISO-8859-1)解码,从而变成了â\x96\x88和â\x96\x80这类乱码字符。
修复方法
方法1:读取时直接指定正确编码
如果能确定网页的编码(比如从网页源码的<meta charset="utf-8">标签确认),在read_html中直接指定encoding参数:
import pandas as pd # 替换为你的网页URL或本地HTML路径 dfs = pd.read_html("https://example.com/table-page", encoding="utf-8") df = dfs[0]
方法2:批量修复已读取的DataFrame乱码
如果读取时没指定编码,已经得到了乱码的DataFrame,可通过重新编码解码修复:
def fix_encoding(text): # 仅处理字符串类型数据 if isinstance(text, str): # 将乱码字符串按错误编码(Windows-1252)转回字节,再用UTF-8解码 return text.encode("windows-1252").decode("utf-8") return text # 应用到整个DataFrame的所有单元格 df_fixed = df.applymap(fix_encoding)
验证修复结果
处理后可以直接打印查看:
print(df_fixed)
此时â\x96\x88会显示为█,â\x96\x80会显示为▀。
内容的提问来源于stack exchange,提问作者Lachlan Macnish
相关产品推荐
相关产品推荐

