1.字符编码
计算机中一个字节(byte)有八个比特(bit),一个字节能表示的最大整数是255,两个字节为65535。
最早只有127个字符被编入计算机,也就是大小写英文及数字,该编码表被称为ASCII表,但是却不能显示别的国家的语言,因此各国制定了各自的编码(中国:GB2312;日本:Shift_JIS;韩国:Euc-kr),因为每个国家都有自己的标准,所以容易引起冲突,在多语言混合的文本中就会出现乱码,为解决这一问题,于是诞生了Unicode标准,把所有标准统一到一个标准里,但是储存空间会比ASCII多出一倍,为了解决这一问题,又出现了可以把Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把Unicode字符根据不同数字大小编码成1-6个字节,常用的英文字母被编码成一个字节,汉字通常是3个字节,只有很生僻的字被编码成4-6个字节。
计算机编码工作方式:在计算机内存中通常使用Unicode编码,当保存到硬盘或者需要传出的时候,就转化成UTF-8编码。
2.字符串
对于单个字符,可以通过ord()函数将获取的字符用整数编码表示,chr()则可以将编码转化成对应的字符。
在Python中字符串类型是str,在内存中以Unicode表示,一个字符代表多个字节。但是如果要在网络上传输,或者将其保存到磁盘上,就需要把str变为以字节为单位的bytes。
在python中byte类型的数据用带b前缀的单引号或双引号表示:x=b“ABC” 在byte中 每个字符只占用一个字节
通过len()函数可以计算 str 的字符数,byte的字节数。
3.字符编码转化
decode('xxx') 可将xxx类型的编码字符转化成由Unicode编码的字符
encode('xxx') 可将Unicode类型编码的字符转化成由xxx编码的字符
想要将其他其他类型的编码转化成别的类型的编码,需通过Unicode作为中间媒介。
s='中文'
s=s.decode('utf-8') #将utf-8编码的解码成unicode
print isinstance(s,unicode) #此时输出的就是True
s=s.encode('utf-8') #又将unicode码编码成utf-8
print isinstance(s,unicode) #此时输出的就是False
'''
print sys.getdefaultencoding()
s='中文'
if isinstance(s,unicode): #如果是unicode就直接编码不需要解码
print s.encode('utf-8')
else:
print s.decode('utf-8').encode('gb2312')
print sys.getdefaultencoding() #获取系统默认的编码
reload(sys)
sys.setdefaultencoding('utf8') #修改系统的默认编码
print sys.getdefaultencoding()