关于Python编码的解读,Python编码解读,# -*- coding


# -*- coding: gbk -*-'''由于网站使用的是utf-8编码,所以我若使用utf-8码上传,网站显示正常但是运行会报错,只需更改编码方式即可,将文件用记事本打开另存为ANSI编码;若我若直接上传那么网站就会显示乱码,当然若前面声明-*- coding: utf-8 -*-则网站显示没问题,运行就会报错,毕竟我这个代码里面全是以GB2312编码的。所以你看到这个网站上传的代码凡是带有coding声明的,基本上都是utf-8,否则就无法保证网站显示与运行兼得。回来在修改一个utf-8版本的。请大侠多多指导'''a="你好"print '第1行  ',a,len(a),type(a)  #a:'\\xc4\\xe3\\xba\\xc3'print '第2行  ',a[0],a[1],a[2],a[3],a[0:2],a[0]+a[2]'''a是一个str字符串,将a视作一个元组,它是按照字节存储,每个字节是一个元素,共有4个元素。a使用gb2312编码,每个汉字有两个字节构成。而print时将按照gb2312反读,"你"的编码为c4e3,"好"的编码bac3,则a[0]为c4,a[2]为ba,a[0]+a[2]为c4ba,即为"暮"的gb2312码'''a1='\\xc4\\xe3\\xba\\xc3'print '第3行  ',a1a1=a1+'\\xc4'print '第4行  ',len(a1),a1    #a1有奇数个字节,print时按照gb2312码反读,每1个字节视为一个gb2312码a1=a1+'\\xc4'print '第5行  ',len(a1),a1    #a1有偶数个字节,print时按照gb2312码反读,每2个字节视为一个gb2312码b=a.decode('gb2312')#将a译码(解码)为unicodeprint '第6行  ',b,len(b),type(b)print '第7行  ',b[0],b[1]'''b是一个unicode字符串,将b视为一个元组,按照unicode编码存储,每个编码为一个元素,共有2个元素。b使用unicode编码,如果是全角字符,则每个编码大小是2个字节,如果是半角字符,则对应编码大小是一个字节。'''banjiao='1 2 3 4 5 6 7 8 9 0'quanjiao=u'\\uff11\\uff12\\uff13'+u"45"+'678'.decode('gb2312')quanjiao1='90'print '第8行  ','这些是半角字符:',banjiaoprint '第9行  ','这些是全角字符:',quanjiao,quanjiao1#quanjiao为unicode字符串,quanjiao1为str字符串,两者不能相加c=u"你好"#c为unicode字符串print '第10行  ',c,len(c),type(c)print '第11行  ',c[0],c[1] #c与b完全一样,d=c.encode('gb2312')#将c按照gb2312编码,d与a完全一样e=c.encode('utf-8')#将c按照utf-8规则编码,c的unicode码为u'\\u4f60\\u597d',按照utf-8编码为'\\xe4\\xbd\\xa0\\xe5\\xa5\\xbd'print '第12行  ',d,len(d),type(d)print '第13行  ',e,len(e),type(e)'''每个汉字的unicode码有16位,按照utf-8的方式编码,每个汉字就需要3个字节,则e长度为6个字节,而将utf-8码视为一个元组时,每个元素为8个字节,则len(e)=6'''print '第14行  ',d[0],d[1],d[2],d[3],d[0:2],d[1:3]print '第15行  ',e[0],e[1],e[2],e[3],e[4],e[5],e[0]+e[1],e[0]+e[5]'''print时将按照gb2312码反读,e[0]+e[1],e[0]+e[5]均为e4bd,而e4bd对应的汉字即为"浣".'''f=e.decode('utf-8')print '第16行  ',f     #将e按照utf-8译码为unicode码后,显示结果正确'''总而言之,在默认情况下print时,python只能识别unicode字符串,其余的将按照本地系统编码读;在本例中,b,c,f为unicode字符串,识别正确,而其余的不管使用什么编码都将按照本地编码系统解读;utf-8码一种说法是unicode的一种实现方式,这没错,但是也可以认为是一种编码,只不过与unicode有联系,假如现在把unicode废除不用了,utf-8依然可以实现编码,而且现在网站应该就是utf-8编码,这其实违背了当时utf-8的发明者的本意,utf-8的出现是为了解决传输问题的,而现在网站为了方便直接用utf-8解码。'''#该片段来自于http://byrx.net

评论关闭