【Python 必会技巧】利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题

先举个例子,分别以不指定编码指定编码为 utf-8指定编码为 utf-8-sig 三种方式来做比较,再将写入 csv 文件和 txt 文件来做个对比


一、不指定编码方式,直接存入 csv 文件

import csvwith open('test.csv', 'w') as fp:writer = csv.writer(fp)writer.writerow(['汉语', '俄语', '韩语', '日语', '英语'])writer.writerow(['爱你', 'люблю тебя', '사랑해요', '愛しています', 'love you'])

此时运行程序会报以下错误:

UnicodeEncodeError: 'gbk' codec can't encode character '\uc0ac' in position 14: illegal multibyte sequence

二、指定编码为 utf-8,再存入 csv 文件

接下来尝试将内容以 utf-8 编码方式存入 test.csv 文件中,可以看到除了英文,其他的全都是乱码:

import csvwith 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 csvwith 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' codec can't encode character '\uc0ac' in position 16: illegal multibyte sequence

五、指定编码为 utf-8 / utf-8-sig,再存入 txt 文件

utf-8 或者 utf-8-sig 编码方式存入 test.txt 文件中,内容都是完全正常的:

with 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-8 with BOM);

  • BOM 全称 ByteOrder Mark,字节顺序标记,出现在文本文件头部,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 就能避免这个错误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437772.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】Dynamics CRM 365零基础入门学习(五)权限管理

一:安全角色 Microsoft Dynamics 365中的安全角色是各种实体的特权和访问级别矩阵。 它们根据其功能分组在不同的选项卡下。 这些组包括:核心记录,营销,销售,服务,业务管理,服务管理&#xff0…

【转】Dynamics CRM 365零基础入门学习(七)Dynamics 365 DataMigrationUtility tool使用

SDK里有个工具叫DataMigrationUtility,这个工具适合两个CRM系统之间的数据迁移。例如:在项目上线之初会做数据初始化的工作,一般这个工作会在UAT开始前完成,当UAT完成之后再把这部分初始化数据迁移到生产环境。那我费了半天劲把数…

【转】Dynamics 365中的应用程序介绍

本人微信和易信公众号:微软动态CRM专家罗勇 ,回复275或者20180630可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong.me 。 Dynamics 365引入了应用程序,为啥…

【转】Dynamics 365中配置和使用文件夹级别的跟踪(folder-level tracking)

本人微信和易信公众号:微软动态CRM专家罗勇 ,回复274或者20180630可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong.me 。 Dynamics 365与Office 365可以方便紧密的集成…

【转】Dynamics 365Online 如何启用手机端APP的离线功能

隐约记得365自带的手机app是支持离线功能的,但实际尝试后发现不行,断开网络后直接提示下图这样,无法操作了 然后就去查询了下最新版的Online设置离线的方式,步骤还挺多的,本篇即来分享下 第一步,首先要确定…

【转】Microsoft Teams快速上手系列-01Teams的前世今生

说到Teams,这到底是一个什么产品?有人说它是团队协作工具,有人说它是云视频系统,有人说它是Hub,还有人说它是微软有史以来发展最快的一个产品,还有人说它完全是一个高效办公神器。其实都是对的。 Teams集成…

【转】响应式详解

一两年以前,我发现,很多人都被响应式搞得很懵逼。 现在,我依然发现,还是有很多人,依旧被响应式搞得很懵逼。 所以,我也很懵逼。 到底是哪个环节出了问题,让这么多学习前端的同学对于这个响应…

Python 数据分析三剑客之 NumPy(一):理解 NumPy / 数组基础

CSDN 课程推荐:《Python 数据分析与挖掘》,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务。曾与联想、亨氏、网鱼网咖等企业合作多个…

【转】Asp.net的生命周期之应用程序生命周期

参考:http://msdn.microsoft.com/zh-cn/library/ms178473(vvs.100).aspx 参考:http://www.cnblogs.com/JimmyZhang/archive/2007/09/04/880967.html Http请求刚刚到达服务器的时候 当服务器接收到一个 Http请求的时候,IIS (Int…

Python 数据分析三剑客之 NumPy(二):数组索引 / 切片 / 广播 / 拼接 / 分割

CSDN 课程推荐:《Python 数据分析与挖掘》,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务。曾与联想、亨氏、网鱼网咖等企业合作多个…

【转】Asp.net的生命周期应用之IHttpModule和IHttpHandler

引言 Http 请求处理流程 和 Http Handler 介绍 这两篇文章里,我们首先了解了Http请求在服务器端的处理流程,随后我们知道Http请求最终会由实现了IHttpHandler接口的类进行处理(应该记得Page类实现了IHttpHandler)。从 Http 请求处理流程 一文的最后的一…

Python 数据分析三剑客之 NumPy(三):数组的迭代与位运算

CSDN 课程推荐:《Python 数据分析与挖掘》,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务。曾与联想、亨氏、网鱼网咖等企业合作多个…

【转】ASP.NET内幕 - IIS处理模型

介绍 微软的Active ServerPages,即ASP,自1996年首次发布以来,为Web开发者构建Web应用提供了一个丰富、复杂的框架。过去的几年它的基础架构发展的如此迅速,成为目前大家了解的ASP.NET,已经不再象它的前身。ASP.NET是构…

沉淀一年零八个月,我也拿到了博客专家

回忆 第一篇文章的发布是在 2018.08.30,虽然注册 CSDN 已有三年多了,但一直都是白嫖大佬们的文章,没有自己写东西,回想起刚开始写博客,最开始并不是在 CSDN 的,在我大二上学期的时候,网上冲浪发…

JAVA-入门(内含jdk配置)

title: java入门 date: 2019-07-21 19:50:19 tags: java学习 top: 1 JAVASE学习 1.java入门 More info: Writing //超链接 2.java开发环境配置 第一步是配置本地开发环境,学习最基本的桌面开发,下面以win10为例配置Java开发环境,即&#…

【转】EF三种编程方式的区别Database first ,Model first ,code first

首先对于EF中先出现的datebase first和model first两种编程方式,其的区别根据字面意思很容易能够理解。 datebase first就是代表数据库优先,那么前提就是先创建数据库。 model first就是代表model优先,那么前提也就是先创建model&#xf…

【转】学习Entity Framework 中的Code First

这是上周就写好的文章,是在公司浩哥的建议下写的,本来是部门里面分享求创新用的,这里贴出来分享给大家。 最近在对MVC的学习过程中,接触到了Code First这种新的设计模式,感觉很新颖,并且也体验到了这种方式…

HDFS--分布式文件系统

HDFS–分布式文件系统 1.Hadoop生态系统简介 2.HDFS基本架构 3.HDFS的核心原理 4.shell命令行操作 5.JAVAAPI的操作 6.HDFS集群运维与调优经验

Hbase搭建-基于hadoop3--并且解决了hbase error: KeeperErrorCode = NoNode for /hbase/master错误

Hbase搭建-基于hadoop3 habse搭建在下面。。上面写有一些我遇到的很烦躁的错误,捣鼓了两天!!! **别用hadoop3** 经过几天的奋战,开始用的hadoop3.2.0,hbase-2.2.0, Hmaster启动后几秒后被杀…