1.在python 2.x中字符串有两种类型:

(1)str1 = "北京"

(2)str2 = u"北京"

通过type(str1)和type(str2)可以知道str1是str类型的,而str2是unicode类型。

 

2.python中的几个编码问题

(1)python脚本文件在保存到磁盘上时有文件的编码方式,如UTF-8,这个和编辑器有关系

(2)python解释器在读取python脚本时,默认使用的是ASCII编码来解析文件。我们可以在脚本文件头上使用#-*- coding: utf-8 -*-来改变python解析时使用的字符编码类型

(3)str1 = "北京" 中str1是str类型,"北京"的编码类型和文件的编码类型是一样的;str2 = u"北京"中的str2是unicode类型,"北京"的编码类型是unicode字符编码。

(4)我们可以使用str1.decode('xxx')来将str类型的str1用xxx字符集解码,转换成unicode类型,使用unicode编码;我们可以使用str2.encode('xxx')将unicode类型的str2使用xxx字符集编码,转换成str类型,使用xxx编码

 

3.区分几个概念

python脚本文件在磁盘上的编码方式

python对象在python解释器的内存空间中编码方式

 

4.举例说明

str1 = '中国'
str1.decode('utf-8')  #使用utf-8解析,然后再使用unicode编码,即从utf-8到unicode的转变
 
str2 = u'中国'
str2.encode('utf=8')  #使用utf-8编码,即从unicode到utf-8的转变<span style="font-family: SimSun; font-size: 10.5pt; background-color: rgb(255, 255, 255);"> </span>

备注:

(1)encode和encode使用unicode作为中间状态相互转换编码方式

(2)在Python3.x版本中,把'xxx'和u'xxx'统一成Unicode编码,即写不写前缀u都是一样的,而以字节形式表示的字符串则必须加上b前缀:b'xxx'

(3)Python当然也支持其他编码方式,比如把Unicode编码成GB2312,但这种方式纯属自找麻烦,如果没有特殊业务要求,请牢记仅使用Unicode和UTF-8这两种编码方式。

(4)str2 = u"北京" 假设python文件是使用utf-8编码,python解释器使用utf-8正常读取文件后,会将str2的utf-8编码自动转换成unicode编码

(5)关于字符编码集参见<<字符编码ASCII | UNICODE | UTF-8 | GB2312学习>>


5.Python文件编码声明

Python中默认的编码格式是ASCII格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。解决方法为只要在文件开头加入 # -*- coding: utf-8 -*- 或者 #coding=utf-8 就行了,其实加上这个声明,是告诉python解释器使用utf-8来解析和处理python脚本文件。范例如下:

#!/usr/bin/python
# -*- coding: utf-8 -*-

print "你好,世界";


#!/usr/bin/python
#coding=utf-8

print "你好,世界";

值得注意的是,Python3.X 源码文件默认使用utf-8编码,所以可以正常解析中文,无需指定 UTF-8 编码。