Python报错:UnicodeDecodeError | 解决pycharm控制台乱码 | 修改pycharm编码方式 | 乱码分类图

文件运行时报错UnicodeDecodeError: ‘gbk’ codec can’t decode byte … in position … : illegal multibyte sequence,解决容易,但是既然出了问题就要从根源上搞明白为什么出了错,所以我会分析原因,最后给出解决办法。

解决方法是通用的,如果出UnicodeDecodeError: ‘UTF-8’ codec can’t decode byte … in position … : illegal multibyte sequence 同理。

任何UnicodeDecodeError: '...' codec can't decode byte ... in position ... : illegal multibyte sequence 都可以用(●′ω`●) 。


问题

今晚python读文件的时候报了个错
在这里插入图片描述

分析原因

UnicodeDecodeError: ‘gbk’ codec can’t decode byte … in position … : illegal multibyte sequence

写的很清楚,Unicode解码失败,在…位置的…编码不能用GBK解码。

😕解释一下:
就是你的文件运行时候是用GBK编码进行解码的。
既然报错GBK没办法解码,就证明你读取的文件不是GBK编码方式的文件。
先看我编译器截图,代码部分直接用with open打开文件,里面存了一首诗,现在编辑区直接打开txt是显示诗词的,但是运行以后会控制台会报错。
在这里插入图片描述
再来看看我的文件保存编码。左下角显示编码方式是UTF-8,所以编译器用GBK解码方式打开UTF-8编码的文件肯定会出问题。
在这里插入图片描述
为了证明我的分析是对的,我现在把我文本文件的编码方式改成GBK,用GBK解码GBK肯定是不会出问题的。看下图:

  • 右下角sublime的左下角可以看到编码方式改成GBK了
  • 左上角我的代码没进行任何修改
  • 左下角控制台输出显示已经正常了——就证明我刚才的分析是对的
  • 有一个小问题是右上角编译器里边看的txt却不正常了。
    • 这种乱码是口字码,产生原因是用UTF-8解码了GBK文件
    • 我用的编译器是pycharm,由此可见,现在的情况是pycharm编辑区直接打开txt用的是UTF-8编码,运行程序时候解码用的是GBK编码方式。

在这里插入图片描述

解决方法

知道产生问题的原因,那解决起来也方便了,就是让你的文件和运行文件时的解码方式一致就可以了
为了让我的pycharm编辑区诗词显示正常,现在我把txt文件的编码方式改回UTF-8。

方法1

现在我们要做的就是运行文件的时候用UTF-8解码就行了,也就是把打开文件的语句改为:

with open('file_10.txt',encoding='UTF-8') as Poem:

encoding = 'UTF-8',重新修改打开文件解码方式,修改之后就好使了。如果不好使耐心往下看 (ง •̀_•́)ง 。

补充: 其他文章里提到的修改方式

  1. with open('file_10.txt','r',encoding='UTF-8') as Poem:
    有人加了个'r',其实就是加个open的mode参数(打开方式参数)而已,r表示以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式,也就说你加不加都是默认以r的方式打开,写了没啥用
    更多参数见:Python3 open() 函数
  2. with open('file_10.txt','rb') as Poem:
    上面解释了r,那这个rb也很好理解,以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这个因电脑而异,有的人电脑上能用二进制解析出来,有的人就不能用,适用面比较窄。
  3. with open('file_10.txt',errors='ignore') as Poem:
    顾名思义,errors='ignore'就是忽略这个错误继续运行,那程序可以给你执行出来,但是会出现乱码(看下图我的执行结果),这种乱码叫古文码,出现原因是用GBK解码方式解码了UTF-8编码的文件。
    在这里插入图片描述
    为什么有的人用这句就好使?那个UnicodeDecodeError报错只是告诉你,你运行时读文件的解码方式不匹配,只是不匹配,没说解不出来。
    编码方式有很多,他们能编码表示的文字范围也不一样,如果你用这个好使,就是你恰好撞上了,你运行时候的解码方式和你文件保存的编码方式是同一系列的,但是你运行文件解码的那个编码方式正好能完全解析出你的文件。所以这个方法好使,但是适用面也很窄很窄。
  4. with open('file_10.txt',encoding='gb18030') as Poem:
    编码方式有很多,你可以用GBK方式打不开,UTF-8也不好使,那你电脑可能不是这两种编码方式,所以你试试别的。这句代码就是让你试试gb18030,有的人可能恰好那个txt文件就是gb18030编码方式,撞上了也是能打开的。所以这个encoding = '×××'后边是不固定的,这个要取决于你电脑上那个txt的编码方式。你要改成相对应文件的那个编码方式才好使。
如何查看电脑文本文件的编码方式
  1. 如果你用sublime,打开文件,左下角就直接显示编码方式。
    在这里插入图片描述

  2. 如果没有sublime,你用记事本打开你的文件,记事本右下角也是编码方式
    在这里插入图片描述

  3. 如果你就啥也不想打开,那我建议你直接用 with open('file_10.txt',errors='ignore'),然后看看出现了哪种乱码,你自己再对着改吧。

附赠乱码分类图

在这里插入图片描述

方法2 修改pycharm编码方法(一劳永逸 )

每次都加一句encoding = '×××'也不是办法,所以我们应该找个简便方法直接修改pycharm编码方法。不用pycharm的别看了

  1. 打开设置FileSetting
    在这里插入图片描述
  2. 修改编码EditorFile Encoding我建议你把绿色里框都改为UTF-8
    注意这一步改了以后,你直接用with open('file_10.txt') 运行,输出可能还是报错。耐心往下看。
    在这里插入图片描述
    解释一下,这是因为程序运行的时候使用的是你计算机的默认编码,而你计算机的默认编码不是UTF-8
    现在你有两条路:
    1. 把刚才所有的UTF-8选项都改为系统默认,也就是system default。(不推荐,建议使用下一个方法
      在这里插入图片描述
    2. 把计算机默认编码改为UTF-8,UTF-8适用范围广,有诸多好处,建议使用。WIN10修改编码方式看这里:Windows修改编码方式 win10

全部改完以后就可以完美显示了╭(●`∀´●)╯:
在这里插入图片描述


我是萝莉安。程序媛永不服输。

  • 42
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ann's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值