Python如何利用utf-8-sig编码格式解决写入csv文件乱码问题

文章推薦指數: 80 %
投票人數:10人

这篇文章主要介绍了Python如何利用utf-8-sig编码格式解决写入csv文件乱码问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章 ... 立即登录 立即注册 服务器 数据库 开发技术 网络安全 互联网科技 登录 注册有礼 控制台 用户中心 财务账户 优惠券 充值 退出 云服务器 香港服务器 高防服务器 最新更新 网站标签 地图导航 产品 首页 >  行业资讯 >  开发技术 >  Python如何利用utf-8-sig编码格式解决写入csv文件乱码问题 0 分享 分享文章到朋友圈 分享文章到QQ 分享文章到微博 复制本文链接 Python如何利用utf-8-sig编码格式解决写入csv文件乱码问题 发布时间:2021-06-1715:12:39 来源:亿速云 阅读:497 作者:小新 栏目:开发技术 这篇文章主要介绍了Python如何利用utf-8-sig编码格式解决写入csv文件乱码问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

先举个例子,分别以不指定编码、指定编码为utf-8、指定编码为utf-8-sig三种方式来做比较,再将写入csv文件和txt文件来做个对比一、不指定编码方式,直接存入csv文件import csv with open('test.csv', 'w') as fp:  writer = csv.writer(fp)  writer.writerow(['汉语', '俄语', '韩语', '日语', '英语'])  writer.writerow(['爱你', 'люблю тебя', '사랑해요', '愛しています', 'love you'])此时运行程序会报以下错误:UnicodeEncodeError:'gbk'codeccan'tencodecharacter'\uc0ac'inposition14:illegalmultibytesequence二、指定编码为utf-8,再存入csv文件接下来尝试将内容以utf-8编码方式存入test.csv文件中,可以看到除了英文,其他的全都是乱码:import csv with open('test.csv', 'w', encoding='utf-8') as fp:  writer = csv.writer(fp)  writer.writerow(['汉语', '俄语', '韩语', '日语', '英语'])  writer.writerow(['爱你', 'люблю тебя', '사랑해요', '愛しています', 'love you'])三、指定编码为utf-8-sig,再存入csv文件当将编码方式换成utf-8-sig之后,显示为正常:import csv with open('test.csv', 'w', encoding='utf-8-sig') as fp:  writer = csv.writer(fp)  writer.writerow(['汉语', '俄语', '韩语', '日语', '英语'])  writer.writerow(['爱你', 'люблю тебя', '사랑해요', '愛しています', 'love you'])四、不指定编码方式,直接存入txt文件with open('test.txt','w') as fp:  fp.write('爱你, люблю тебя, 사랑해요, 愛しています, love you')和存入csv文件一样,也会报以下错误:UnicodeEncodeError:'gbk'codeccan'tencodecharacter'\uc0ac'inposition16:illegalmultibytesequence五、指定编码为utf-8/utf-8-sig,再存入txt文件以utf-8或者utf-8-sig编码方式存入test.txt文件中,内容都是完全正常的:ith open('test.txt','w', encoding='utf-8') as fp:   fp.write('爱你, люблю тебя, 사랑해요, 愛しています, love you') with open('test.txt','w', encoding='utf-8-sig') as fp:   fp.write('爱你, люблю тебя, 사랑해요, 愛しています, love you')utf-8与utf-8-sig有什么区别?utf-8以字节为编码单元,它的字节顺序在所有系统中都是一样的,没有字节序问题,也因此它实际上并不需要BOM;uft-8-sig中sig全拼为signature,即带有签名的utf-8(UTF-8withBOM);BOM全称ByteOrderMark,字节顺序标记,出现在文本文件头部,Unicode编码标准中用于标识文件是采用哪种格式的编码。

为什么写入csv文件要用utf-8-sig编码?Excel在读取csv文件的时候是通过读取文件头上的BOM来识别编码的,如果文件头无BOM信息,则默认按照Unicode编码读取。

当我们使用utf-8编码来生成csv文件的时候,并没有生成BOM信息,Excel就会自动按照Unicode编码读取,就会出现乱码问题了。

为什么写入txt文件要用utf-8编码?在写入txt文件时,Windows会默认转码成gbk,遇到某些gbk不支持的字符就会报错,在打开文件时就声明编码方式为utf-8就能避免这个错误。

知识点扩展:utf-8和utf-8-sig的区别前言:在写入csv文件中,出现了乱码的问题。

解决:utf-8改为utf-8-sig区别如下:1、”utf-8“是以字节为编码单元,它的字节顺序在所有系统中都是一样的,没有字节序问题,因此它不需要BOM,所以当用"utf-8"编码方式读取带有BOM的文件时,它会把BOM当做是文件内容来处理,也就会发生类似上边的错误.2、“uft-8-sig"中sig全拼为signature也就是"带有签名的utf-8”,因此"utf-8-sig"读取带有BOM的"utf-8文件时"会把BOM单独处理,与文本内容隔离开,也是我们期望的结果.感谢你能够认真阅读完这篇文章,希望小编分享的“Python如何利用utf-8-sig编码格式解决写入csv文件乱码问题”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习! 推荐阅读:python写入txt文件正常,但是写入csv文件中文乱码问题 免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:[email protected]进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python csv 上一篇新闻:python中怎么控制多进程 下一篇新闻:golang通过cgo调用C++程序的方法 猜你喜欢 使用php怎么在修改新闻时删除图片 利用php怎么实现一个跨服务器访问功能 php中解析字符串排列数组的方法 使用PHP怎么将远程图片保存到本地 PHPIDEPHPStorm怎么配置支持Laravel代码的提示方法 php解析xml方法的实例讲解 使用php怎么对网站的在线人数进行计算 使用PHP输出一个等腰三角形 怎么解决PHPsession文件独占锁引起阻塞的问题 利用PHP怎么获取数组中最大值的下标 最新资讯怎么远程使用jupyternotebookPython随机值怎么实现nginx反向代理ftp服务器怎么搭建Python的configparser模块怎么使用Flask中如何优化SQL如何使用random模块生成验证码python的requests库get和post参数怎么传递python项目目录规范是什么怎么用vue代码实现打印功能windows蓝屏代码0x000007b怎么解决 相关推荐 python读取和写入csv文件的方法 如何在python中写入csv python如何写入数据到csv或xlsx文件 python如何对csv文件追加写入列 Python如何实现读取及写入csv文件 Python把字典写入到CSV文件的方法 python如何以字典方式写入csv文件 利用python如何删除csv文件 如何解决csv文件读写乱码问题 Python怎么读取和写入操作CSV文件 相关标签 python学习 ipython python深拷贝 python字典 python线程队列 pythondjango python参数类型 python学习之 python鸭子类型 python3.7.3 python小技巧 python面试 python-v python2.7安装 python内存分配 python多线程 python面向对象 python多进程 python语言基础 python算法 主题地图 微信小程序入口 css边框阴影 mysql最新版本 idea导入eclipse项目 ssh端口号 微信小程序支付 游戏云主机 list删除指定元素 docker命令 小程序代码 微信小程序授权 cad注册机怎么用 ascii码转换 pdf转png windows激活码 rabbitmq集群 idea汉化 spring依赖注入 常用dns 虚拟ip地址 docker部署 cad怎么画矩形 pdf文件加密 ps快速去水印 mac怎么重装系统 php时间戳 mysql查看版本 sudo命令



請為這篇文章評分?