使用 Python,我從 API 獲取一些文本資料,并在經過一些轉換后將其存盤在文本檔案中,然后從不同的行程中讀取該文本檔案。
從 API 讀取資料時沒有問題,但在讀取文本檔案時出現此錯誤:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x96 in position 907: invalid start byte
被讀取為 '0x96' 的位元組實際上是 API 資料中的“–”字符,并且僅當encoding引數顯式指定為時才會發生此錯誤'utf-8'。在打開文本檔案時encoding未顯式傳遞給open函式時不會發生這種情況。
我的問題:
- 為什么只有在
encoding指定時才會出現此錯誤?我認為,在其他情況下我們也應該得到相同的錯誤,因為默認編碼也是“UTF-8”。(如果我錯了,請糾正我) - 是否可以在不改變我閱讀文本檔案的方式的情況下解決這個問題?(即,我可以對從 API 資料創建此文本檔案的階段進行任何更改嗎?)
真的很感謝你研究它。謝謝!
uj5u.com熱心網友回復:
在open()默認編碼取決于平臺的情況下,您可以通過檢查locale.getpreferredencoding()回傳的內容來找出系統的默認編碼。這是來自檔案
對于問題的第二部分,由于未指定utf-8為編碼時不會出現錯誤,因此您可以僅使用輸出locale.getpreferredencoding()作為編碼方法。
uj5u.com熱心網友回復:
如果您這樣做,您可以對文本的每一行執行此操作。因為0x96被認為是“不可列印的”。
import re
...
line = re.sub(r'\x96',r'\x2D', line)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/328540.html
