编码和解码是针对数据而言的,数据能干什么呢?无非就是用来显示,储存和传输的;
储存和传输数据当然是希望数据越小越好,所以发明了utf-8这种数据编码显示;它智能将英文用一个字节表示,欧洲的字符用两个字节表示,中文用三个字节表示。
数据显示的话不需要考虑数据的大小呢!因此统统采用国际标准的unicode标准来显示,每个字符都占用两个字节。无论是中文还是英文还是其他什么国家的文字。
数据你想显示,大小无所谓,那就用国际标准的呗,也就是unicode, 所以说你在打字时,屏幕上显示的都是用unicode解码好的,但你在中国很多都是用gbk解码显示的,如Windows下cmd。。好了,现在你写好字呢,你想把他保存下来,当然是数据越小越好,所以你就需要编码呢,编码你可以用encode这个方法,你把你写的字编码成utf-8这种编码格式的话保存的数据就变小呢!
如何编码成utf-8呢?
格式:对象.encode('utf8')
就将这个对象编码成了utf-8的数据类型来存储。
当然你也可以编码成国产的gbk的编码形式。顺便支持一下国产^_^
对象.encode('gbk')
就将这个对象编码成国产的gbk形式的编码来保存数据。
************************************************************************************************************
万一哪一天你想看你曾经写下的字。也就是在屏幕上显示数据。
如果你曾今用全球化的utf-8编码,那么你要进行解码,解码用decode这个方法,
格式:对象.decode('utf8')
如果你曾今用国产的gbk编码的,那么解码
格式:对象.decode('gbk')
恭喜你,你就可以悠闲的在屏幕上看着你曾今写下的字。
———————————————————————————————————————————————————————————————————————————————
cmd乱码问题?
比如:你在python3中写入一个字符串,2 :python3的解释器会自动对字符串进行unicode的编码,这种str就被编码成了unicode数据类型,unicode数据可以被任何的shell解码,支持cmd的gbk解码,但是如果你在python2中就不行呢?为什么呢?
#coding:utf8 s = '小明'
在python2中输入这段代码,放在cmd运行结果显示的是乱码,为什么呢?
因为当你写入这个字符串时,python2中的解释器就会进行按照申明的utf8进行编码成字节流,而这个文件也是以utf8格式保存的,关键是这个字节流向cmd传输时,cmd默认的是gbk格式解码的,而这个字节流是以utf8格式保存的,两种格式不一样,所以会出现乱码的问题。
如何解决呢?
先试第一种办法,就是将python2中的解释器按照声明gbk格式编码成字节流,看行不行?
#__author__ = 'admin' #coding:gbk s = '小明' print(s)
结果发现是行的!
再试第二种方法,只能从代码入手呢?
可以将这个字符串编码成gbk格式不就能cmd不就能解码了吗?
第一步:因为这个小明已被python2的解释器编码成utf-8的字节流数据,所以我们先解码 s.decode('utf') 解码成unicode数据
第二步:对这个unicode数据的小明进行编码gbk格式的 s_unicode.encode('gbk')
第三步就可打印呢:
具体代码为
#coding:utf8 s = '小明' s_unicode = s.decode('utf8') s_gbk = s_unicode.encode('gbk') print(s_gbk)
其实我们还可以对这段代码进行优化!
既然unicode数据能被任何格式的解码方式解码。没必要对其进行再编码成gbk格式;
所以我们只需第一步就可,没必要进行第二步的操作。
这两种方法都成功呢!
**************************************************************************************************************************************************************************************************
python3中,有两种数据类型,str和bytes。(str是一种编码好的字符串,万国用unicode,中国用gbk。或许日本使用jbk^_^。。而bytes是字节,只能用ascll码表示的0-255个字符)
python3中明确规定,str这个在屏幕上显示字符串统统用unicode数据表示。而用来储存和传输的数据bytes数据,这个bytes数据计算机更好理解。而人不好理解;
python3中,编码的同时会将数据变成byte类型; byte类型是字节,只有ascll码中能打印出来;
解码的同时会将byte类型转换为字符串;