软件测试学习 之 Pycharm 乱码问题(二) 执行py文件控制台输出乱码

12 篇文章 0 订阅
2 篇文章 0 订阅

软件测试学习 之 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)

情况二:

以上两种都无法解决你的问题,文件的编码格式没有问题,PycharmFile 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
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 当PyCharmPython控制台输出乱码时,可能是由于以下原因引起的: 1. 编码设置不正确:可以尝试修改PyCharm的编码设置。在PyCharm的菜单栏中选择"File"->"Settings"->"Editor"->"File Encodings",将"Project Encoding"、"Default encoding for properties files"、"Default encoding for .txt files"等选项设置为与你的代码文件的编码一致。 2. 输出中含有无法解码的字符:在控制台输出中,如果包含了Unicode字符或其他无法解码的字符,可能会导致乱码。可以尝试使用正确的编码对这些字符进行编码和解码,例如使用UTF-8编码。 3. 字体设置问题:如果控制台输出乱码主要是显示为方块或其他乱码形式,而不是实际字符乱码,可能是由于字体设置问题。可以尝试更改PyCharm的字体设置。在PyCharm的菜单栏中选择"File"->"Settings"->"Editor"->"Font",修改Console Font设置为支持你要显示的字符的字体。 4. 操作系统设置问题:如果操作系统的默认编码与PyCharm中的编码设置不一致,也可能导致控制台输出乱码。可以尝试更改操作系统的默认编码设置,使之与PyCharm的编码设置一致。 如果以上方法都没有解决问题,可以尝试使用其他Python集成开发环境(IDE)或命令行来运行同样的代码,观察是否还存在乱码问题。如果在其他环境中没有乱码问题,则可能是PyCharm本身的问题,可以尝试更新或重新安装PyCharm来解决。 ### 回答2: 在PyCharm中,如果python控制台输出乱码,可能是因为以下几个原因: 1. 编码问题:请确保你的代码文件控制台的编码一致。可以在PyCharmFile -> Settings -> Editor -> File Encodings中设置编码为UTF-8,并勾选"Transparent native-to-ascii conversion"选项。 2. 输出内容包含非ASCII字符:如果输出内容包含中文等非ASCII字符,可以尝试使用Python内建的encode函数来手动指定输出的编码方式。例如:print("中文".encode("utf-8"))。 3. 字体设置:控制台显示乱码可能是因为字体不支持或不正确。可以尝试在PyCharmFile -> Settings -> Editor -> Color Scheme -> Console Font中更改字体,选择一个支持中文的字体。 4. 系统环境配置:有时候乱码问题可能与系统环境配置有关。可以尝试在PyCharm中创建一个全新的项目,并在新项目中运行代码,看看是否还存在乱码问题。如果新项目没有乱码问题,则可能是旧项目的设置有问题,可以尝试重新配置。 综上所述,如果PyCharmpython控制台输出乱码,可以尝试上述解决方法,找出具体原因并进行相应的调整和配置。 ### 回答3: 当pycharmpython控制台输出乱码时,可能是由于以下几个原因导致的: 1. 编码不匹配:Python控制台默认使用UTF-8编码,如果你的输出使用的是其他编码格式,就会出现乱码。可以尝试使用合适的编码格式对输出进行编码,或者将输出转换为UTF-8编码。 2. 操作系统不匹配:有时候,在不同的操作系统上运行相同的代码会导致控制台输出乱码。这是因为不同操作系统默认使用的终端编码不同。可以尝试使用相关函数(如sys.stdout.encoding)获取控制台当前的编码格式,并将输出转换为相应的编码。 3. 字符集问题:可能是由于控制台无法正确识别或显示某些特殊字符集导致输出乱码。可以尝试修改控制台的字符集配置,以确保能够正确显示特殊字符。 4. 程序bug或错误:如果以上方法都没有解决问题,那么可能是程序本身存在问题。可以借助debug工具逐行检查代码,特别是涉及字符串操作的部分,查找潜在的编码或解码问题。 总之,解决pycharmpython控制台输出乱码问题,需要仔细检查代码、输出编码以及操作系统等方面的配置,以找到问题的根源并采取相应的解决措施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值