python基础--编码,,编解码ASCII:1


编解码

ASCII:1字节,0-255GBK2313:常用的汉字,2万多个GBK:对GBK2313的补充,支持藏文,2个字节表示一个汉字big5:台湾,繁体字unicode:万国码,2-4字节,只是在内存中使用,传输或者保存时要编码UTF:Unicode transformation formatUTF-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-8UTF8/UTF16实现Unicode的标准,把字符存储到存储介质中。py3py3中默认的编码格式是utf-8,utf-8编码中文一般为3个字节,gbk一般是2个字节py3默认类似是str类型(即unicode类型),在文件中保存的类型都是bytes类型 默认是str类型(unicode)----->>>>不能直接写入到文件中,也不能再网络上传输(必须编码后传输 bytes类型------->>>>用于网络传输 网页源码----->>>>charset------->>>>字符集encode编码/decode解码Unicode类型(str)---->通过encode(编码)----->转为bytes类型(utf-8,ascii,gbkbytes类型(utf-8,ascii,gbk)---->通过decode(解码)----->转为Unicode类型(str)py2py2默认类型是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类型b‘\xe4\xb8\xad\xe5\x9b\xbd‘  #bytes类型前面有个b开头>>> type(s.encode("utf-8"))<class ‘bytes‘>>>>>>> s.encode("gbk")  #str类型转化为bytes类型需要encode编码一下b‘\xd6\xd0\xb9\xfa‘>>> s.encode("gbk").decode("gbk")  #bytes类型转为str类型需要decode一下‘中国‘>>> type(s.encode("gbk").decode("gbk"))<class ‘str‘>>>>注意:写入文件时,必须encode后才能写入



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

>>> s="光荣之路测试开发培训".encode("gbk")#用gbk编码
>>> s
b‘\xb9\xe2\xc8\xd9\xd6\xae\xc2\xb7\xb2\xe2\xca\xd4\xbf\xaa\xb7\xa2\xc5\xe0\xd1\x
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,u‘abc‘  #解码后是unicode,开头加了u>>> type(s.decode("gbk"))<type ‘unicode‘>>>> print s.decode("gbk")abc>>> print s.decode("gbk").encode("gbk")abc>>>
注:如果记不住可以不用管py2里的情况只记py3的

python基础--编码

评论关闭