我在編程的Python下面的示例代碼,以及一些confuses.Here的寫入簡單的字符串到一個文件,然後讀回的UnicodeDecodeError與Seek()和read()
>>> 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
現在的代碼,是什麼讓我感到困惑的是,爲什麼這個UnicodeDecodeError發生在數據字符串是utf8編碼的情況下?手動讀取f.read()可以正常工作,但當使用seek跳轉並讀取(1)時,會顯示此錯誤。
我的問題是,我認爲read()實際上讀取一個字節不是字符,您的解釋是有道理的。謝謝! – Zed 2013-02-13 17:14:15