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  方圆几百里Idea  阅读(3927)  评论(0编辑  收藏  举报

导航