Python基础之编码(中文编码)

系统 1501 0

首先,介绍一下编码类型:
Python基础之编码(中文编码)_第1张图片
然后,再看一下编码类型的转换过程:
Python基础之编码(中文编码)_第2张图片
python程序是在内存中运行,因此应该处理的是Unicode类型的字符串,文件或终端中的各种编码方式,可以理解为py3中的Bytes类型。
Unicode只能在内存中使用
Bytes是在文件存储和网络数据传输中使用

记住我们的程序要处理的是Unicode类型

下面看一下py2和py3中字符串的类型:
py2:
在这里插入图片描述
py3:
在这里插入图片描述
看起来好像一样,都是str类型,其实对应的编码方式是不一样的,请看下图:
Python基础之编码(中文编码)_第3张图片
这样是否看出区别了呢?在py3中,str就是Unicode类型,所以py3中不会有中文编码的各种问题,声明一个str类型的中文字符串,程序即可直接进行处理;但是在py2中呢,str是对应的gbk、utf-8等类型,相当于编码后的Unicode,程序要处理的是Unicode类型,而你的中文字符串是gbk类型(随便选一个举例),这样程序自然就报错了。

py3:
s = “abc” #等价于py2的unicode类型,例如s=u"中国"
type(s) —str类型—>> unicode
s1=b"abc" —bytes类型—(gbk,utf-8…)

s.encode(“utf-8”)—>bytes类型
s.encode(“utf-8”).decode(“utf-8”)—>unicode类型

py2:
s = “中国” #等价于 py3的bytes类型
type(s) —str类型—>不是unicode,而是类似py3里面的bytes对象
s.decode(“utf-8”)—>unicode
s.decode(“utf-8”).encode(“utf-8”)类型—>str类型

这样看是否就很清晰了呢?也就是说你在py3中声明一个str类型变量,这个变量支持的操作是编码操作,即s.encode(“utf-8”);
而你在py2中声明一个str类型变量,这个变量支持的操作是解码操作,即s.decode(“utf-8”)

那么,有中文的情况下应该怎么使用才不会报错呢?
py2:
1 文件要存为utf-8
2 文件第一行声明为(下面这几种都可以,随便选一种):
#encoding=utf-8
#coding=utf-8
#coding:utf-8
# coding:UTF-8
3 所有的中文前面加u,表示unicode

py3:
1 文件要存为utf-8
2 声明可以不加,加上也没问题
3 中文前面不用加u,加了也没事

常用终端的编码类型:
CMD是gbk编码
记事本默认ANSI编码(gbk)

注:
1.读文件 读到的都是Unicode
2.编码和解码要用相同的字符集(用什么编码就用什么解码)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论