软件测试学习 之 Pycharm 乱码问题(一) 文件和代码内容乱码
衔接上文↑
转载说明
本文内容主要根据以下两篇博文整理
原文:pycharm输出中文出现乱码的几种解决方法以及读取时打印出现乱码的解决
作者:chinwuforwork
出处:csdn
原文:解决PyCharm控制台中文输出乱码
作者:wenggz
出处:csdn
情况一:
# coding=utf-8
str = "python2的默认编码为ascii"
print(str)
输出结果
python2鐨勯粯璁ょ紪鐮佷负ascii
这种情况是由于windows 的本地默认编码是 cp936,也就是 gbk 编码,由于python2 str相当于bytes,直接打印将以utf-8字节码的形式由控制台用GBK解码输出
可以对字符串重新编码
# coding=utf-8
str = "python2的默认编码为ascii"
str_ = str.decode("utf-8").encode("GBK")
print(str)
print(str_)
结果如下
python2鐨勯粯璁ょ紪鐮佷负ascii
python2的默认编码为ascii
或者修改python默认编码
# coding=utf-8
import sys
str = "python2的默认编码为ascii"
str_ = str.decode("utf-8").encode("GBK")
# 此处必须重新加载,否则无法使用setdefaultencoding方法
reload(sys)
sys.setdefaultencoding('utf-8')
# python会以默认编码方式自动解码
str__ = str.encode("GBK")
print(str)
print(str_)
print(str__)
输出结果如下
python2鐨勯粯璁ょ紪鐮佷负ascii
python2的默认编码为ascii
python2的默认编码为ascii
对于这两个处理中文输出的代码,最好每次处理中文时就加上,会减少很多问题
注:
如果操作的对象是文件,那就要涉及文件系统默认编码
了
import sys
type = sys.getfilesystemencoding()
print myname.decode('UTF-8').encode(type)
情况二:
以上两种都无法解决你的问题,文件的编码格式没有问题,Pycharm
的File coding
配置也没有问题,打印出来还是乱码,也许你输入的中文编码就有问题
了
print type(s)#s为任意字符串
如果结果是 type str
, pycharm的console中文输出的要求需要的编码是unicode,这就是主要症结所在。所以,我们需要做的是把str转为unicode
with open("test") as f:
for i in f:
# 将读入的utf-8字节流进行解码
u = i.decode('utf-8')
这是一种常规的做法,将字符输出是编码,还有一种就是在读入数据的时候就将字符编码
# 使用codecs直接开unicode通道
import codecs
file = codecs.open("test", "r", "utf-8")
for i in file:
print type(i)
# i的类型是unicode的
这里使用了codecs库,这是一种Python自带处理各种字符编码的字符串和文件的库,对文件的读入,爬虫网页的读入,都有很好的效果,网上有很多教程,这里就不多赘述。
情况三
执行print函数
输出控制台显示为乱码,python版本为3.7.2
,项目默认编码为utf-8
当使用print向运行界面打印信息时,是把这个字符串用默认编码转化成对应的的字节给运行界面显示的,python会自动根据环境转成对应的选择默认的控制台编码(sys.stdout.encoding),如果编码类型与控制台编码不一致,或者人为修改控制台编码,就会造成控制台解码出现乱码
import sys
import locale
import io
print('中文字符')
print()
print("sys.stdout:")
encoding = sys.stdout.encoding
# 执行这步操作可能会导致之前的print操作全部失效
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='gbk')
print("sys.stdout.encoding 修改前(before):", encoding)
encoding = sys.stdout.encoding
print("sys.stdout.encoding 修改后(after):", encoding)
print()
print('中文字符')
执行结果
中文字符
sys.stdout:
sys.stdout.encoding ��ǰ(before)�� UTF-8
sys.stdout.encoding �ĺ�(after)�� gbk
�����ַ�
只有当修改为对应的编码时,输出才能正常
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
或者不做修改,直接采用默认编码
# sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='gbk')
执行结果:
中文字符
sys.stdout:
sys.stdout.encoding 修改前(before): UTF-8
sys.stdout.encoding 修改后(after): utf-8
中文字符
情况四:
调用os.system()
时PyCharm控制台中文输出乱码
原作者的PyCharm是2017.2.4版本
具体显示如下
网上说的将两个Encoding
格式都设置为UTF-8
并没有解决问题,后来我将Project Encoding
的编码改为GBK
(国标)后才克服乱码,具体实现和效果如下:
File -> Settings -> Editor -> File encoding
显示正常
后来发现,设置成GBK后会有可能导致coding中注释的中文不是UTF-8格式而导致错误,解决办法就是在代码最上方加上
# -- coding:utf-8 --
# -*- coding:utf-8 -*-
# coding:utf-8
或者
# -- coding=utf-8 --
# -*- coding=utf-8 -*-
# coding=utf-8
一劳永逸就是像这样:
File -> Settings -> Editor -> File and Code Templates -> Python Script