LIUBOLIUHAO 发表于 2022-10-29 11:15:58

File read()方法报错原因

f = open(r'C:\temp.txt')

f

<_io.TextIOWrapper name='C:\\temp.txt' mode='r' encoding='cp936'>

f.read()                                                                                    
                                                                      #想问一下这里为什么会报错
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
    f.read()
UnicodeDecodeError: 'gbk' codec can't decode byte 0xaf in position 8: illegal multibyte sequence


suchocolate 发表于 2022-10-29 11:36:34

试试 open(r'C:\temp.txt', encoding='utf-8')

漫星闪 发表于 2022-10-29 11:38:54

解码错了,gbk去解码(该字符串变成Unicode),''illegal multibyte sequence"的意思是没法子解码了。
可能是字符串不是gbk编码,却是gbk编码去解码。打个比方吧,字符串是utf-8的,但用gbk去解码,肯定会出错。

LIUBOLIUHAO 发表于 2022-10-29 11:49:24

懂了,感谢二位

jackz007 发表于 2022-10-29 11:49:58

本帖最后由 jackz007 于 2022-10-29 11:51 编辑

f = open(r'C:\temp.txt')
      这个语句按文本模式打开文件 'C:\temp.txt'
f . read()
      这一句读取文件全部文本,Python 实际上从文件中读取到的是字节码,需要经过解码才能成为 Python 字符串,如果按前面的文件打开方式,解码将会按照 Windows 缺省的 'GBK' 编码格式进行,但是,这个文件的字节码并不是采用 'GBK'编的码,于是就会出现解码错误。
      这个问题可以通过更换解码引擎进行解决
f = open(r'C:\temp.txt' , encoding = 'UTF-8')

LIUBOLIUHAO 发表于 2022-10-29 11:53:46

jackz007 发表于 2022-10-29 11:49
这个语句按文本模式打开文件 'C:\temp.txt'

      这一句读取文件全部文本,Python 实际上从文 ...

感谢
页: [1]
查看完整版本: File read()方法报错原因