python2.x编码问题实例

2018-06-18 00:55:15来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

1,编码问题,主要是区分面向人类的字符串,面向计算机的字节序列

在python3中,字符串是str(默认即unicode),字节序列是bytes

在python2中,字符串是unicode,字节序列是str

无论python3还是python2,从字符串向字节序列转换称为encode(编码),从字节序列向字符串转换称为decode(解码)

python2中可以通过type(s)确定是str还是unicode

如果是str,可以继续通过chardet.detect(s)确定编码类型
 
2,python2,结合type(s),和chardet.detect(s),实验str字符串结果如下:
#coding:utf-8
1)s1 = '人生'     # s1是str,类型是utf-8
2)s1 = '人生'.encode('gbk')     # 报错,原因是python实际执行了s = '中文'.decode('asc-ii').encode('gbk'),而ascii不支持中文
3)s1 = '人生'.decode('utf-8').encode('utf-8')     # s1是str,类型是utf-8,转换过程是utf-8、unicode、utf-8
4)s1 = '人生'.decode('utf-8').encode('gbk')     # s1是str,类型是gbk,转换过程是utf-8、unicode、gbk
5)s1 = u'人生'      # s1是unicode
6)s1 = '人生'.decode('utf-8')     # s1是unicode
7)s1 = unicode('人生' ,  'utf-8')     # s1是unicode,内部先转成str('utf-8'),再转成unicode,后面的'utf-8'改成'gbk'也行,如果不写则是通过defaultencoding转换
另外,1和3在pycharm正常打印中文,但是在windows环境下乱码,原因是windows是gbk编码,同理4正好相反,pycharm乱码但是windows正常。5、6、7在两个环境下都能正常打印中文,原因是python unicode会自动转换成环境的编码
 
3,python2.x和python3的中文支持差别
对于s = '你好',如果要显示到windows的gbk环境:
python2中,需要经过utf-8,unicode,gbk的转换,可以是:
#coding:utf-8
print '中文'.decode('utf-8').encode('gbk')
print unicode('中文', 'utf-8').encode('gbk')
print u'中文'.encode('gbk')
python3中,str所代表的都是unicode,可以直接输出到其他环境,支持中文显示:
print('中文')

 



 

 

 

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:我的第一个python web开发框架(21)——小结

下一篇:Python3 的序列