目前在做的專案中,有一個列表用到的資料沒有找到能直接滿足需求的資料,給到我的檔案裡面是一張sql表,需要自己從sql表中,洗出自己需要的資料,於是想到了Python.
在使用python讀取檔案的時候,報了下面的錯誤:UnicodeDecodeError: `utf8` codec can`t decode byte 0xb1 in position 0: invalid start byte.
網上一開始查到帖子說是編碼格式不對,需要在python 檔案的頂上新增 # codeing= utf-8
,以支援中文編碼,由於給到的sql 檔案中,確實含有中文,於是就加上了上面的utf-8的支援,滿懷希望的執行Python程式,結果還是報了同樣的錯。
經過一番查詢,找到了真正的解決方法,就是檔案的編碼格式不對,需要在檔案讀取的時候設定正確的編碼格式,或者直接修改檔案的編碼格式為程式預設支援的格式。解決方法如下:
1、檢視檔案的編碼格式: vim/vi編輯器(進入esc命令模式),執行set fileencoding,檢視檔案的編碼格式,在Python程式中把檔案讀取時的格式設定為該編碼格式,即能正確讀取檔案。
2、更改檔案的編碼格式:vim/vi編輯器(進入esc命令模式),執行命令,set fileencoding=utf-8,然後回車,此時我們將檔案的格式改成了utf-8格式的了,使用utf-8讀取,就能正確的讀出檔案。
總結
1、在Python檔案頂部新增 `#encoding=utf-8`,只是設定當前Python檔案支援中文的輸入,並不能真正解決讀取的檔案的編碼格式不支援的問題。
2、遇到讀取的檔案格式不支援的情況,正確的的做法還是,檢視檔案真正的編碼格式,在程式讀取的檔案的時候,設定正確的編碼格式;或者修改檔案的編碼格式為我們程式支援的格式。