ASCII是美国信息交换标准代码,是标准的单字节编码(8位)。unicode是计算机科学领域的业界标准,2字节(16位)。
GBK称汉字内码扩展规范,双字节编码。UTF-8是针对unicode的可变长度编码,它支持所有国家语言。
在python编写程序时,通常指定#conding=utf-8。但是若终端显示器支持的是GBK,为避免显示错误,需要编码转换。
实际上,GBK和UTF-8都是以unicode为基础的,它们的关系如下:
在用python编程过程中,若涉及到中文,且需要将中文代码由UTF-8转换成GBK时,具体操作如下:
python2.7版本,转换过程为:UTF-8 —> Unicode —> GBK 。如下:
#coding=utf-8 name = '名字' #这里是UTF-8 #先将转换UTF-8转换成unicode name_unicode = name.decode('UTF-8') #decode需要指明现在的类型 #再将unicode转换成GBK name_GBK = name_unicode.encode('GBK') #encode需要指明需要转换成的类型 #转换完成,在终端可以正常显示 print(name_GBK)
python3.6版本,可直接将UTF-8转换成GBK。如下:
#coding=utf-8 name = '名字' #这里是UTF-8 #直接将UTF-8转换成GBK name_GBK = name.encode('GBK') #encode需要指明需要转换成的类型 #转换完成,在终端可以正常显示 print(name_GBK)
另外,Windows自带编码转换功能,可以自动将unicode转换成任何需要的编码形式。
所以,在python2.7版本下,可以将UTF-8转换成unicode后,省略unicode转成GBK环节。如下:
#coding=utf-8 name = '名字' #这里是UTF-8 #将UTF-8转换成unicode name_unicode = name.decode('UTF-8') #decode需要指明现在的类型 #省略UTF-8转码GBK环节,由Windows自动完成。 print(name_unicode)
但是,如上做法在python3.6版本中会出现错误,因为python3之后的版本中移除了unicode类型、默认utf-8。慎用!