鱼C论坛

 找回密码
 立即注册
查看: 3181|回复: 5

[已解决]File read()方法报错原因

[复制链接]
发表于 2022-10-29 11:15:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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

最佳答案
2022-10-29 11:38:54
解码错了,gbk去解码(该字符串变成Unicode),''illegal multibyte sequence"的意思是没法子解码了。
可能是字符串不是gbk编码,却是gbk编码去解码。打个比方吧,字符串是utf-8的,但用gbk去解码,肯定会出错。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-29 11:36:34 | 显示全部楼层
试试 open(r'C:\temp.txt', encoding='utf-8')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-29 11:38:54 | 显示全部楼层    本楼为最佳答案   
解码错了,gbk去解码(该字符串变成Unicode),''illegal multibyte sequence"的意思是没法子解码了。
可能是字符串不是gbk编码,却是gbk编码去解码。打个比方吧,字符串是utf-8的,但用gbk去解码,肯定会出错。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-29 11:49:24 | 显示全部楼层
懂了,感谢二位
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-29 11:53:46 | 显示全部楼层
jackz007 发表于 2022-10-29 11:49
这个语句按文本模式打开文件 'C:\temp.txt'

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

感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 06:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表