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格式读取文件
所以,在执行命令行时,最好指定一下编码格式,解决方式很多,网上可以搜索到