|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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的位置位于 '小' 的开始位置?
|
|