如何正确将CSV文件的Windows-1251编码转换为UTF-8编码
正确转换编码的操作方案
方案一:直接修正读写环节的编码配置(优先推荐)
问题根源是初始读取源文件时编码配置错误,导致读入内存的内容本身就是乱码,后续无论用什么格式保存都会保留乱码。按以下代码修改读写逻辑即可:
- 读取原始
RUvideos.csv时指定源文件编码为Win-1251(Python中编码名称为cp1251):
import pandas as pd from os.path import join data = pd.read_csv('RUvideos.csv', encoding="cp1251")
- 导出title列时明确指定UTF-8编码,可添加
utf_8_sig兼容Excel打开不会乱码,同时关闭索引输出避免多余列:
x = data.title.copy() x.to_csv(join(fld, 'title.csv'), encoding='utf_8_sig', index=False)
方案二:针对已生成的乱码文件直接转码
如果不想重新读取原始文件,可直接对现有乱码文件做字节层面的编码转换:
# 读取乱码文件的原始字节流 with open(join(fld, 'title.csv'), 'rb') as f: raw_data = f.read() # 按Win-1251解码后重新编码为UTF-8保存 fixed_data = raw_data.decode('cp1251').encode('utf-8') with open(join(fld, 'title_fixed.csv'), 'wb') as f: f.write(fixed_data)
注意事项
- 不要使用Excel另存为修改编码,Excel会默认修改分隔符、添加额外格式,极易导致后续pandas读取时出现列拆分错误
- Notepad++单纯切换显示编码不生效的原因是当前文件属于双重编码错误:Win-1251编码的字符被错误以UTF-8格式存储,仅切换显示编码无法修复,必须做字节层面的转码操作。
内容的提问来源于stack exchange,提问作者senek
相关产品推荐
相关产品推荐

