我正在关注 Programming Python 中的示例代码,但有些令人困惑。这是将简单字符串写入文件然后将其读回的代码
>>> data = 'sp\xe4m' # data to your script
>>> data, len(data) # 4 unicode chars, 1 nonascii
('späm', 4)
>>> data.encode('utf8'), len(data.encode('utf8')) # bytes written to file
(b'sp\xc3\xa4m', 5)
>>> f = open('test', mode='w+', encoding='utf8') # use text mode, encoded
>>> f.write(data)
>>> f.flush()
>>> f.seek(0); f.read(1) # ascii bytes work
's'
>>> f.seek(2); f.read(1) # as does 2-byte nonascii
'ä'
>>> data[3] # but offset 3 is not 'm' !
'm'
>>> f.seek(3); f.read(1)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa4 in position 0:
unexpected code byte
现在,让我感到困惑的是,如果数据字符串是 utf8 编码的,为什么会发生这个 UnicodeDecodeError?使用手动 f.read() 读取可以正常工作,但是当使用 seek 跳转和 read(1) 时,会出现此错误。