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 

 

posted @ 2025-04-27 16:54  klchang  阅读(200)  评论(0)    收藏  举报