python2中 print()中文乱码怎么办
python内部使用的是unicode编码,而外部会用到各种编码,中国最常用utf-8。
python默认会认为源代码文件是ascii编码,ascii编码中不存在中文,遇到中文会抛出异常。
一、声明utf-8编码格式
此时需要在头部声明utf-8编码格式,常用声明方法有这么3种
# coding=utf-8 # coding:utf-8 #!/usr/bin/python # -*- coding:utf-8 -*-
注意:
前两种不能有空格。
第一行和第二行重复定义,第一行生效,第二行不生效。
在python 里认为utf8和utf-8是一种编码格式utf-8。
不过这不是万能的,对于有的汉字,还是偶尔会乱码,这时候转换成unicode对象一般就可以了
二、转换成unicode对象
将字符串转换成unicode对象常用的3种方法:
1、字符串前面加u
s1=u'国道图层' print ('s1:'+s1)
u将字符串以unicode格式存储。python头部声明的utf-8编码识别字符串,然后转换成unicode对象。
也就是说不加u就是某种编码的字符串,这里是utf-8编码的字符串。
如果加u就是一个unicode对象。
可以用type()函数查看数据类型。
2、unicode()
s2=unicode('国道图层', 'utf-8')
print ('s2:'+s2)
unicode类需要传入两个参数,第一个是字符串参数,第二个是编码参数,会将字符串封装为一个unicode对象。
3、decode()
s3='国道图层'.decode('utf-8')
print ('s3:'+s3)
decode是将普通字符串按照参数中的编码格式进行解析,然后生成对应的unicode对象。
补充:与decode()相反的就是encode(),encode()是将一个unicode对象转换为参数中编码格式的普通字符。如下:
s4=unicode('国道图层', 'utf-8').encode('utf-8')
print ('s4:'+s4)
三、代码测试
#coding=utf-8 s='国道图层' print ('s:'+s) print(type(s)) s1=u'国道图层' print ('s1:'+s1) print(type(s1)) s2=unicode('国道图层', 'utf-8') print ('s2:'+s2) print(type(s2)) s3='国道图层'.decode('utf-8') print ('s3:'+s3) print(type(s3)) s4=unicode('国道图层', 'utf-8').encode('utf-8') print ('s4:'+s4) print(type(s4))
运行结果:
>>> ================================ RESTART ================================ >>> s:鍥介亾鍥惧眰 <type 'str'> s1:国道图层 <type 'unicode'> s2:国道图层 <type 'unicode'> s3:国道图层 <type 'unicode'> s4:鍥介亾鍥惧眰 <type 'str'>
posted on 2021-02-05 13:00 Keepshining 阅读(4140) 评论(0) 编辑 收藏 举报