不难看出,默认应用的就是ascii率攀来对unicode就行编码,为什么是ascii码,其实就是体系默认编码(sys.getdefaultencoding的返回值)。ascii码显然无法表示汉字,于是抛出了异常。而应用utf-8编码的时刻,因为utf可以或许表示这个汉字,所以没报错。
如不雅直接打印ss(us.encode(‘utf-8’)的返回值)会怎么样
- >>> print ss
- 涓
结不雅略有些奇怪,us.__str__(即直接打印us)的结不雅不一样,那么尝尝encoding = gbk呢?
- >>> print us.encode('gbk')
- 严
U got it! 事实上也是如斯,python会采取终端默认的编码(用locale.getdefaultlocale()查看,windows是为gbk)将unicode编码成str类型。
在Linux(终端编码为utf-8),结不雅如下:
- >>> us= u'严'
- >>> print us.encode('utf-8')
- 严
- >>> print us.encode('gbk')
- ▒▒
- >>> print us
- 严
- >>>
留意膳绫擎的乱码!
unicode gbk之间的转换
在上上末节,介绍了unicode可以经由过程utf-8编码(encoding = utf-8),转换成utf-8表示的str,在上一节也可以看出unicode也可以经由过程gbk编码(encoding=gbk),转换成gbk表示的str。这里有点晕,留作第一个问题,后面解释
unicode与utf8之间的互相转换可以计算得知,但unicode与gbk之间的互相转换没有计算公式,就只能靠查表了,就是说有一张映射表,有某一个汉字对应的unicode表示与gbk表示的映射关系
- >> us = u'严'
- >>> us
- u'\u4e25'
- >>> us.encode('gbk')
- '\xd1\xcf'
- >>> us.encode('gb2312')
- '\xd1\xcf'
- >>> us.encode('gb18030')
- '\xd1\xcf'
- >>> s = '严'
- >>> s
- '\xd1\xcf'
- >>>
大年夜上不难看出,严的unicdoe编码是4e25,GBK编码是d1cf,是以us经由过程gbk编码就是d1cf。同样也能看到,GB18030,GBK,GB2312是兼容的
ss = us.encode(‘utf-8’), ss是一个str类型,直接打印结不雅有点奇怪,一个“涓”字,那一个str类型的“涓”是哪些二进制构成的呢
- >>> s = '涓'
- >>> s
- '\xe4\xb8'
可以看到,str类型的“涓”,其二进制是E4B8,跟’严’的utf8编码(E4B8A5)相差了一个A5,那么就是因为A5显示不出来,验证如下:
是以,只是刚巧显示了“涓”罢了,事实上ss跟“”涓“”毫无关系
推荐阅读
能拍照,还能视频通话?coolpad Dynobot儿童智能手表让你惊艳
市面上的绝大部分儿童手表都不能拍照,最大卖点的只是语音通话功能。Dynobot是市面上仅有的配备两个摄像头的儿童手表,支持480P视频通话。表盘30万像素满足孩子自拍需求,顶部200万像素摄像头可以拍孩子看到的任何画>>>详细阅读
本文标题:不想再被鄙视?那就看进来! 一文搞懂Python 2字符编码
地址:http://www.17bianji.com/lsqh/39888.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示