|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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就不行了,求大神解释,谢谢
gbk一个中文占2个字节,第45刚好是小,所以第47才会是甲,小和甲之间没有其他符号,自然第46无法解码
|
|