py open 文件时指定编码格式_别让Python3编码问题缠着你

说明:当我们执行程序时,如果出现了乱码,就是一脸懵,为啥又乱码了,这篇文章是我个人在编码中定位到问题的一个落笔。

1.编码的背景问题?

1.1 编码问题的起源 计算机美国起源,只需要ASCII即可,但是去了其他的国家,那么ASCII就行不通了,所以 每个国家都编制了自己国家的码,那么就乱了,所以世界组织就编写了一个万国码,这个码可 以包含所有国家的字,这个就是Unicode码。

1.2 Unicode与UTF-8码的关系 不同国家的字节数不同,如果都是用相同的长度去保存的话,就会浪费空间,UTF-8就是为了 可伸缩的编码格式,用于传输和保存时使用。

1.3 Unicode与其他国家编码的问题 Unicode与其他国家码都有一个映射关系,这也就是我们可以为啥内存都是Unicode编码。如: gbk编码的文件,打开显示就是解码为Unicode进行展示的

2.编码与解码

编码与解码是所有的核心,就是无论什么时候,乱码的出现都是你编跟解出了问题。就是编 码是一个,解码是另一个。我们编辑文件都有一个编码格式。如:我们打开一个这个utf8编码 格式的文件查看,那么就是将编码为utf8的二进制文件解码(decode)为Unicode在编辑器进 行编辑。保存的时候又用UTF-8编码为二进制存到硬盘上。所有的编解码都是在这个上面进行 的,最重要的就是知道,到底是用什么码编的,用什么码解的。只要搞清楚两个主体,问题都会得到解决。

6f2b83be7730e9ad05d1a96bb33c909f.png

3.py文件的开始加个coding代表的啥

加这个coding到底是解码还是编码:解码(将硬盘数据加载到内存中去)

对于.py文件为utf8编码的,其实不需要加的,因为文件的编码是utf8,python3解释器解码 使用也是utf8,就没有这个使用了。当我们使用print打印的时候就是要使用python解释器的 编码规定进行解码,你加coding就是告诉解释器用什么解这个码。

那么这里的编码和解码是什么?这个是关键 你编写py文件就像我们编写任何一种文件一样txt,都可以选择一种编码形式去操作。你用 什么形式去编就需要用什么解。打开文件(用utf8解码为unicode到内存编辑),保存文件 (用utf8编码为二进制的存储到硬盘上)。 我们使用print进行打印就相当于我们的打开文件(重点)。你用什么编码到硬盘上的,就要使用 什么编码解码print出来看,文件头就是在python3的解释器用什么去解这个。没有比这个 更加直白的说明了。

4.python中操作文件open中指定的编码意思

这里还是那个问题,用什么解用什么编,拿出来说是因为这里有个坑,python3解释器的编码 格式为utf8,windows操作系统为gbk,linux是utf8

s="你好"
with open("1.txt","w",encoding="xxx")as f:
  f.write(s) 

s为内存展示的,就是有一个解码到内存中展示, f.write(s)是一个编码的过程,重点来了:这里你不指定编码格式,这里就会去使用操作系统 的编码格式,没错,如果你的s为utf8解码到内存的,如果你用gbk编码到硬盘中,此时是gbk 二进制,如果用utf8去打开文件(解码)就会乱码,只能使用gbk去可以看到不乱码的数据。


总结:编码问题的思考解决的方式就是要认清到底是使用什么编码的,解码展示的时候又是什么。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值