讀取檔案出現unknown encoding: cp0錯誤
在我輸入程式碼:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import geopandas as gpd
fn = r'C:\Users\王振宇\Downloads\mapdata201810161155\20172\20172臺灣海岸線.shp'
gdf_Rail=gpd.read_file(fn,encoding='utf-8') gdf_Rail
之後得到了以下錯誤:
unknown encoding: cp0
再請專家們幫小弟解惑,感謝!
回答列表
-
2019/09/01 下午 05:02陳明佑 (Ming You Chen)贊同數:0不贊同數:0留言數:1
中文資料要載入時, 常常會碰到這種困難
這裡的錯誤就告訴你 : 你的這個檔案原本編碼時不是用 utf-8 編碼的, 所以無法解碼
這時候往往就要嘗試很多編碼方法, 沒有一定的做法
如果是自己產生的編碼(比方說從windows產生), 就可以用big5先解碼看看
如果是別人匯出的檔案的話...因為對方作業系統或者中文編碼不同...沒有固定解法
連我們自己處理時也會覺得很麻煩, 因此匯出匯入時, 都會盡量避開中文
-
2019/09/01 下午 06:46張維元 (WeiYuan)贊同數:1不贊同數:0留言數:0
嗨,這個部分是讀檔的時候預設的編碼方式跟實際內容不同導致的錯誤。有可能是作業系統環境的差異導致。不管你是用 Python 原生的 open/read 或是 Pandas 提供的 read_csv 方法,都可以再開檔的時候指定 encoding 參數。
假設要使用 utf-8 編碼方式存取檔案,使用方法如下:
```
encoding = 'utf-8'
# 法一
f =open('filename.txt','r', encoding=encoding)
text = f.read()
f.close()
# 法二
df = pd.read_csv('filename.csv',encoding=encoding)
```
另外一種常見的問題是,可能不知道原始檔案的編碼方式為何,可以透過 chardet 工具來查詢:
```
import chardet
with open('filename.txt','rb') as f:
result = chardet.detect(f.read())
```
最後科普一下幾種常見的編碼格式:
* Unicode/UTF8:萬國碼,可支援多種語言的編碼格式
* ISO-8859-1/latin1:主要用於歐系國家的文字
* Big5:繁體中文
* GBK:簡體中文
* cp950:windows 預設的編碼