加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python基础--编码

发布时间:2020-12-20 10:26:56 所属栏目:Python 来源:网络整理
导读:编解码 ASCII:1字节,0-255 GBK2313:常用的汉字,2万多个 GBK:对GBK2313的补充,支持藏文,2个字节表示一个汉字 big5:台湾,繁体字 unicode:万国码,2-4字节,只是在内存中使用,传输或者保存时要编码 UTF:Unicode transformation format UTF-8:变长

编解码

  • ASCII:1字节,0-255
  • GBK2313:常用的汉字,2万多个
  • GBK:对GBK2313的补充,支持藏文,2个字节表示一个汉字
  • big5:台湾,繁体字
  • unicode:万国码,2-4字节,只是在内存中使用,传输或者保存时要编码
  • UTF:Unicode transformation format
  • UTF-8:变长,1-4个字节,兼容ASCII,汉字2字节,好处是省空间,但是浪费时间
  • UTF-16:2字节
  • UTF-32:4字节

总而言之:

  • Unicode定义世界每个字符的索引值。
  • Unicode编码:包含全世界的所有字符,但是,他只是用来在内存中使用。一旦需要存储到文件或者是网络传输,默认计算机系统不支持unicode。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?如果必须要存储到文件或者网络传输时:我们必须用bytes类型(gbk或utf-8编码的bytes类型字符串)。? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?我们用gbk还是utf-8?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?你的应用程序是针对所有的处理都是utf-8,那么你传输的数据就要必须是utf-8
  • UTF8/UTF16实现Unicode的标准,把字符存储到存储介质中。
?
?
py3
  • py3中默认的编码格式是utf-8,utf-8编码中文一般为3个字节,gbk一般是2个字节
  • py3默认类似是str类型(即unicode类型),在文件中保存的类型都是bytes类型
? ? ? ? ? ? ? ? 默认是str类型(unicode)----->>>>不能直接写入到文件中,也不能再网络上传输(必须编码后传输
? ? ? ? ? ? ? ? bytes类型------->>>>用于网络传输
? ? ? ? ? ? ? ? 网页源码----->>>>charset------->>>>字符集
encode编码/decode解码
Unicode类型(str)---->通过encode(编码)----->转为bytes类型(utf-8,ascii,gbk
bytes类型(utf-8,gbk)---->通过decode(解码)----->转为Unicode类型(str)
?
?
?
py2
  • py2默认类型是str类型(即bytes类型)?

bytes类型---->通过decode(解码)---->转化为Unicode类型(str)

Unicode类型---->通过encode(编码)----->转化为bytes类型

?
?
总结:
encode:都是用来得到非unicode类型字符串
decode:都是用来获取unicode类型
?
#py3里面的字符串 

>>> s="a"
>>> type(s)  #py3对应的str是unicode类型
<class str>

>>> s1=b‘a‘? ?#py3中前面加b是变成bytes类型

>>> type(s1)
<class ‘bytes‘>

>>> s="中国"
>>> s.encode("utf-8")  #encode编码后转为bytes类型
bxe4xb8xadxe5x9bxbd  #bytes类型前面有个b开头
>>> type(s.encode("utf-8"))
<class bytes>
>>>
>>> s.encode("gbk")  #str类型转化为bytes类型需要encode编码一下
bxd6xd0xb9xfa
>>> s.encode("gbk").decode("gbk")  #bytes类型转为str类型需要decode一下
中国
>>> type(s.encode("gbk").decode("gbk"))
<class str>
>>>

注意:写入文件时,必须encode后才能写入



注意:用什么编码就对应的用什么解码,否则会报错或者乱码
 
  

>>> s="光荣之路测试开发培训".encode("gbk")#用gbk编码
>>> s
b‘xb9xe2xc8xd9xd6xaexc2xb7xb2xe2xcaxd4xbfxaaxb7xa2xc5xe0xd1x
b5‘
>>> s.decode("utf-8")#用utf-8解码
Traceback (most recent call last):
File "<stdin>",line 1,in <module>
UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xb9 in position 0: invalid#报错:‘utf-8‘编解码器不能解码字节0xb9在位置0:无效
start byte
>>>

 
  

>>> s.decode("gbk")#用gbk解码
‘光荣之路测试开发培训‘
>>>

?

?

?
#py2里面的字符串

>>> s="abc"
>>> type(s)  #py2对应的str是bytes类型
<type str>
>>>
>>> s.decode("gbk") #py2str类型不能encdoe,只能先decode,
uabc  #解码后是unicode,开头加了u
>>> type(s.decode("gbk"))
<type unicode>
>>> print s.decode("gbk")
abc
>>> print s.decode("gbk").encode("gbk")
abc
>>>注:如果记不住可以不用管py2里的情况只记py3的

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读