python UnicodeDecodeError

UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x80 in position 1993: illegal multibyte sequence

今天在命令行执行python代码时报了编码错误,很奇怪,网上搜查了,都只说了解决方法,却没有说原因

我找了半天整理了一下我遇到的情况和原因

我是在读取文件时报了这个错,错误的大概意思是,gbk编码方式无法读取我的我的文件,非法的字节序列,很明显是编码格式的问题,但是为什么会有这个问题呢

>>> f = open('D:\\Cynthia\\Desktop\\businesstrip\\依赖文档.txt','r')
>>> f.read()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'gbk' codec can't decode byte 0x9a in position 14: illegal multibyte sequence

我按照网上提示的改了代码,可以了

>>> f = open('D:\\Cynthia\\Desktop\\businesstrip\\依赖文档.txt','r',encoding='UTF-8')
>>> f.read()
'dubbo 地址:\n\n<dependency>\n    <groupId>com.huatu</groupId>\n    <artifactId>esb-interface</artifactId>\n    <version>1.1.1.RELEASE</version>\n</dependency>'

说明确实编码环境的问题,那么问题来了,是因为python的默认编码是gbk的原因吗?

python3默认编码
>>> import sys
>>> print(sys.stdout.encoding)
utf-8

结果是,python3的默认编码是utf-8

文档的编码格式UTF-8

那么我的文档的编码格式呢,这边无法截图,只能告诉结果,编码是UTF-8的

CMD编码格式

那么就是CMD的环境了,查看了一下CMD默认编码格式,是GBK的

>>> import locale
>>> print(locale.getpreferredencoding())
cp936
>>> print(locale.getdefaultlocale())
('zh_CN', 'cp936')

可以用python查看,也可以直接在命令行查看

C:\Users\111>chcp
活动代码页: 936
    
chcp 437      英文
chcp 932      日文
chcp 936      简体中文
chcp 950      繁体中文
chcp 65001    UTF-8

所以原因知道了,代码的执行环境是GBK的,所以导致了python在执行代码时,直接用GBK格式读取文件

所以,在执行命令行时,最好指定一下编码格式,解决方式很多,网上可以搜索到