Excel 打开 csv 文件乱码问题之 Python 解决方法
问题分析
当使用Excel打开csv文件时,显示乱码。其原因是Excel没有识别出csv文件编码,而通过在csv文件头部加入BOM(Byte Order Mark,字节顺序标记),以帮助Excel确认csv文件采用哪种编码格式。
Python 代码
这里的解决方法是,采用 Python自带的有BOM的 utf8 编码,即 utf-8-sig,对csv进行重新保存。假定csv文件的初始编码为utf8,然后通过Python代码转为utf-8-sig编码,具体示例代码如下:
# 生成csv样例文件,返回文件名data1.csv
def gen_csv_file(encoding='utf-8-sig'):
csvfile = 'data1.csv'
fieldnames = ['名称', '日期', '收盘价']
data = ['大北农', '2025-04-25', '4.11']
with open(csvfile, 'w', encoding=encoding) as fp:
fp.write(','.join(fieldnames)+'\n')
fp.write(','.join(data))
fp.write('\n')
return csvfile
# 把csv的编码格式转换为utf-8-sig编码
def convert_utf8_to_utf8bom(inp_csv, out_csv):
with open(inp_csv, 'r', encoding='utf8') as fp:
data = fp.read()
with open(out_csv, 'w', encoding='utf-8-sig') as fp:
fp.write(data)
if __name__ == '__main__':
inp_csv = gen_csv_file('utf-8')
out_csv = 'out.csv'
# 采用utf-8-sig编码格式,将最初的csv文件重新保存为 out.csv
convert_utf8_to_utf8bom(inp_csv, out_csv)
参考资料
[1] 【Python 必会技巧】利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题. https://blog.csdn.net/qq_36759224/article/details/104417871

浙公网安备 33010602011771号