Python高性能编程 中文高清pdf完整版[17MB]
一、预习:
1、Unicode 和utf-8之间的关系
unicode是一种编码标准,具体的实现标准可能是utf-8,utf-16,gbk ……
UTF-8是Unicode的实现方式之一
2、python2和python3 Unicode变化
Python 2有两个全局函数可以把对象强制转换成字符串:unicode()把对象转换成Unicode字符串,还有str()把对象转换为非Unicode字符串。
Python 3只有一种字符串类型,Unicode字符串,所以str()函数即可完成所有的功能。unicode()函数在Python 3里不再存在了。
3、Unicode和Ascii编码有关系吗?
Unicode与ASCII一样是一种字符编码方法,Unicode占用2个字节,容纳65536个字符,这完全可以容纳全世界所有语言文字的编码。在Unicode 里,所有的字符都按一个字符来处理, 它们都有一个唯一的Unicode 码。
ASCII 是用来表示英文字符的一种编码规范。每个ASCII字符占用1 个字节,因此,ASCII 编码可以表示的最大字符数是255(00H—FFH)。这对于英文而言,是没有问题的,但是对于中文等比较复杂的语言,255个字符显然不够用。于是,各个国家纷纷制定了自己的文字编码规范,其中中文的文字编码规范叫做“GB2312—80”, 它是和ASCII 兼容的一种编码规范, 其实就是利用扩展ASCII没有真正标准化这一点,把一个中文字符用两个扩展ASCII 字符来表示,以区分ASCII 码部分。但是这个方法有问题,最大的问题就是中文的文字编码和扩展ASCII 码有重叠,导致出现乱码问题,而且由于各国和各地区都有自己的文字编码规则,它们互相冲突,这给各国和各地区交换信息带来了很大的麻烦。
unicode是一种编码标准,具体的实现标准可能是utf-8,utf-16,gbk ……
为了解决上述问题,诞生了Unicode。
二、python默认编码
python3中默认编码是utf-8,由于utf-8和Unicode之间的关系,说明python3中,所有字符串都是Unicode字符集
python2中,解释器默认将源码认作Ascii编码格式,python2中如果在源码首行不显式指定编码,无法在源码中出现非Ascii字符,否则出现乱码。在Python2中,普通字符串是以8位ASCII码进行存储的,而Unicode字符串则存储为16位unicode字符串,这样能够表示更多的字符集。使用的语法是在字符串前面加上前缀 u。
三、python3中各个字符编码转换
####python3 默认的编码为unicode
1、python3怎样把gb2312格式的字符串转换成utf-8格式
首先把gb2312格式字符串转换为Unicode,然后Unicode在转换为utf-8
字符串转换步骤:gb2312 -> Unicode -> utf-8
实例字符串:a='我很好的'
转换代码:a.decode("gb2312").encode('utf-8')
decode 是解码,把一直的gb2312格式转换为中间格式unicode,encode再转换为你需要的utf-8
2、python3怎样把utf-8格式的字符串转换成gb2312格式
字符串转换步骤:utf-8 -> Unicode -> gb2312
转换方法同上
3、python3怎样把unicode 转为 gb2312,utf-8等,使用 encode
字符串转换步骤:Unicode -> utf-8或者gb2312
# -*- coding=UTF-8 -*-
s = u'中国' s_gb = s.encode('gb2312')
4、python3怎样把utf-8,GBK转换为 unicode 使用 unicode(s,encoding) 或者 s.decode(encoding)
字符串转换步骤: utf-8或者gb2312 -> Unicode
#coding=utf-8
if __name__ == '__main__':
#在一个默认为utf-8的脚本文件中,把s中的字符串定义为unicode格式
s = u'中国'
#s为unicode先转为utf-8
s_uft8 = s.encode('utf-8')
#把utf-8格式的s_uft8字符串转换为unicode和s比较看看什么结果
assert(s_utf8.decode('utf-8') == s)
总结:utf-8和gb2312等常见格式彼此之间相互转换时,要先转换为Unicode格式,然后通过Unicode再转换为其他格式
转载请注明:谷谷点程序 » python2和python3字符编码 unicode,utf-8,gb2312相互转换encode,decode