字符编码-python

在python2.7下字符编码的问题

#--*-- coding:utf-8 --*-- 
s="你好"                     ##2.7就看第一行写啥
s_to_unicode=s.decode("gbk")
print s_to_unicode

结果为:浣犲ソ 其实这句话s_to_unicode=s.decode("gbk"),就相当于你非要用记事本打开word一样,没什么意义
s还是utf-8的编码格式,但你非要使用gbk的转码包,gbk的字节范围时包含utf-8的,但打开的是乱码而已,毕竟对应关系不一样

1 s="你好"
2 s_to_unicode=s.decode("gbk")
3 print s_to_unicode

如果没有第一行就会报错了,此时s将使用默认的ascii来存储,但ascii的字节范围是1个字节,无法保存的,就会报错了
http://www.cnblogs.com/work115/p/5924446.html

在python2中进行编码和解码的时候,不指定编码方式,那么python就会使用defaultencoding
1 #--*--coding:utf-8--
2 s="你好"
3 #: s是一个utf-8格式的字符串
4 u=s.decode("utf-8")
5 #: s被解码为unicode对象,赋给u
6 sg=u.encode("gbk")
7 #:  u被编码为gbk格式的字符串,赋给sg
8 print sg
1 #--*--coding:utf-8--*--
2 s="你好"
3 ss=s.encode("gbk")
4 print ss

上面的代码会报错,报错信息:'ascii' codec can't decode byte......
因为没有指定defaultencoding,所以其实在做这样的事情:s.decode('ascii').encode('gbk')
(ascii解码包是无法解码utf-8的)

设置defaultencoding代码如下:

1 reload(sys)
2 sys.setdefaultencoding('utf-8')

当然这些主要是在python2.x下的问题,没有特殊需求就用python3吧

python3默认的字符编码为unicode

推荐阅读更多精彩内容