鱼C论坛

 找回密码
 立即注册
查看: 1276|回复: 1

[已解决]28讲,文件 ,第八题,关于seek(46)为啥不对的问题

[复制链接]
发表于 2020-11-28 00:22:41 | 显示全部楼层 |阅读模式

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

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

x
“8. 还是视频中的那个演示文件(record.txt),请问为何f.seek(45, 0)不会出错,但f.seek(46)就出错了呢?
>>> f.seek(46)
46
>>> f.readline()
Traceback (most recent call last):
  File "<pyshell#18>", line 1, in <module>
    f.readline()
UnicodeDecodeError: 'gbk' codec can't decode byte 0xe3 in position 4: illegal multibyte sequence
复制代码

答:因为使用f.seek()定位的文件指针是按字节为单位进行计算的,演示文件(record.txt)是以GBK进行编码的,按照规则,一个汉字需要占用两个字节,f.seek(45)的位置位于字符“小”的开始位置,因此可以正常打印,而f.seek(46)的位置刚好位于字符“小”的中间位置,因此按照GBK编码的形式无法将其解码!”

请问在解答当中“f.seek(45)的位置位于字符“小”的开始位置,因此可以正常打印,而f.seek(46)的位置刚好位于字符“小”的中间位置,因此按照GBK编码的形式无法将其解码”这句话是什么意思?“小”的中间位置指的是啥,本人找了一下,在视频当中显示的f.seek(45,0)打印出来的行显示为“小甲鱼:咦??\n”,那46和45应该对应的都是“小”才对,为啥46就不行了,求大神解释,谢谢
最佳答案
2020-11-28 01:16:22
gbk一个中文占2个字节,第45刚好是小,所以第47才会是甲,小和甲之间没有其他符号,自然第46无法解码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-28 01:16:22 | 显示全部楼层    本楼为最佳答案   
gbk一个中文占2个字节,第45刚好是小,所以第47才会是甲,小和甲之间没有其他符号,自然第46无法解码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-6 19:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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