Python如何导入含emoji的CSV文件并解决编码乱码及报错问题
解决带emoji的CSV文件读取乱码/报错问题
问题根因
UTF-8解码报错的核心原因是文件中存在少量不符合UTF-8编码规范的异常字节,Notepad++解码时自动忽略了错误字节,因此会显示文件为UTF-8编码;用ISO-8859-1读取时emoji乱码是因为该编码为单字节解析规则,无法正确识别多字节的emoji字符。
可行解决方法
方法1:编码容错读取(推荐,无需修改原文件)
pandas支持在读取时配置编码容错规则,跳过/替换非法字节的同时保留正常UTF-8编码的emoji内容,代码如下:
import pandas as pd # 最新版pandas支持直接传encoding_errors参数 df = pd.read_csv(DATA, encoding='utf-8', encoding_errors='ignore')
如果使用的pandas版本较低不支持上述参数,可以用文件对象先做容错处理再读取:
import pandas as pd with open(DATA, 'r', encoding='utf-8', errors='ignore') as f: df = pd.read_csv(f)
如果担心忽略异常字节丢失关键信息,可将errors参数值替换为'replace',非法字节会被统一替换为�标识,你可以后续单独处理这些标记内容
方法2:转存为标准UTF-8文件
如果容错读取仍有问题,可以手动把文件转为标准UTF-8编码:
- 用Notepad++打开目标CSV文件
- 点击顶部菜单栏「编码」→「转为UTF-8编码」(不要选择带BOM的选项)
- 保存修改后直接用
pd.read_csv(DATA, encoding='utf-8')读取即可
后续emoji转换操作
读取完成后直接调用emoji库的demojize方法处理对应文本列即可,示例代码:
import emoji # 把参数中的content替换为你存储带emoji文本的列名 df['processed_text'] = df['content'].apply(emoji.demojize)
内容的提问来源于stack exchange,提问作者EarthLing
相关产品推荐
相关产品推荐

