鱼C论坛

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

[已解决]小白求助第28讲第8题

[复制链接]
发表于 2020-2-23 11:11:33 | 显示全部楼层 |阅读模式

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

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

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编码的形式无法将其解码!



https://www.bilibili.com/video/av27789609?p=29 这是原视频网址,问题在12:18处。
我数了一下共有19个汉字,1个:  1个, 1个? 1个\n 这最多就43个字节 那么f.seek(44,0)不就可以开始从 '小' 打印了吗,45便位于 '小' 的结束位置, 为什么说45的位置位于 '小' 的开始位置?
最佳答案
2020-2-24 16:26:55
HMartin 发表于 2020-2-24 09:30
这么说那一个小矩形就算一个字节了?

对,每个矩形是一个字节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-23 11:48:17 | 显示全部楼层
首先下标从0开始数,所以f.seek(45),其实是第46个位置(如果从1开始数的话)

前面:,?都是中文字符,都是占2个字符的,所以前面一共有(19个汉字+3个中文符号 = 22个中文符号,1个\n是一个英文字符),即 22*2 + 1 = 45,下标从零开始数,“小”前面那个字符的结束位置是44,所以45是小的起始位置
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-23 12:41:29 | 显示全部楼层
shuofxz 发表于 2020-2-23 11:48
首先下标从0开始数,所以f.seek(45),其实是第46个位置(如果从1开始数的话)

前面:,?都是中文字符, ...

45是小的起始位置,那么从45开始数,一个汉字俩字节,那么46不就数完了吗,为什么说46是中间位置呢,45,46,47那就是三个字节了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-23 18:41:02 | 显示全部楼层
HMartin 发表于 2020-2-23 12:41
45是小的起始位置,那么从45开始数,一个汉字俩字节,那么46不就数完了吗,为什么说46是中间位置呢,45, ...

Snipaste_2020-02-23_18-40-17.jpg
这样画能明白不
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-24 09:30:00 | 显示全部楼层
shuofxz 发表于 2020-2-23 18:41
这样画能明白不

这么说那一个小矩形就算一个字节了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-24 16:26:55 | 显示全部楼层    本楼为最佳答案   
HMartin 发表于 2020-2-24 09:30
这么说那一个小矩形就算一个字节了?

对,每个矩形是一个字节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-8 09:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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