python导出写入csv文件中文乱码【亲测】

最近处理mongodb中的数据。
要将mongo中的数据导入到csv文件中。正常写入csv文件后。在Pycharm中查看中文正常显示。
但用office打开csv后,中文却显示乱码。
以下方法亲测有效:

with codecs.open('test.csv', 'w', 'utf_8_sig') as csvfile

将 utf-8  改为  utf_8_sig

对于乱码的成因猜测:
UTF-8分为两种:
    一种是不带BOM的,不带BOM的是标准形式。
    一种是带BOM的,带BOM的主要是微软的习惯。
微软在UTF-8中使用BOM(Byte order mark)是因为这样可以将UTF-8和ASCII等编码明确区分开。windows对于utf-8格式的文件存储默认是带有BOM的格式。
在Pycharm中能够正常输出中文,但是导出到文件后使用excel打开是出现中文乱码可能是因为excel能够识别gb2312、gbk、gb18030或utf_8 with BOM 编码的中文,如果是utf_8 no BOM编码的中文文件,excel打开会乱码。

关于utf-8与utf_8_sig的区别:

UTF-8以字节为编码单元,它的字节顺序在所有系统中都是一様的,没有字节序的问题,因此它实际上并不需要BOM(“ByteOrder Mark”)。但是UTF-8 with BOM即utf-8-sig需要提供BOM("ByteOrder Mark")。

你可能感兴趣的:(数据库,数据处理,Python爬虫)