python中,不論是pd.read_csv還是open都可以指定encoding, 通常我們可用的是utf-8或者gbk, 這兩種編碼格式也是較為常見的編碼格式,以這兩種編碼格式讀出來的內容是我們可讀的。但是有時檔案儲存是其他的格式,這時如果encoding指定不正確的話就無法成功讀取該檔案,比如所latin編碼格式的檔案。當然,可以指定encoding為latin來讀取該檔案,但是讀取後顯示出來的內容是不可理解的,示例如下:
#äãºã2020#ðâäêµúò»ììôªæøâúâúµäôçæð³öãåâòôç·¹½á…
在liunx中,可以vim開啟該檔案,然後在最後輸入:set fileencoding 檢視檔案編碼格式,也可以用命令file ***來檢視***的編碼格式。
檢視完之後就可以用命令iconv來對檔案格式做轉碼,也可以直接用:set fileencoding=***來編碼,但是檔案特別大的時候,這個方法不太優雅,甚至成功不了。
iconv使用命令為
iconv -c -f 原始檔案編碼格式 -t 期望編碼格式 原始檔案》期望檔案
-c 的作用是遇到不可轉碼的字元跳過,這樣就保證了會把能轉的都轉了,如果不加的話,遇到不可轉碼的字元後就會停止,就可能出現轉碼後的檔案內容缺失。
轉碼後再用python讀取就可以了
這裡有乙個問題,iconv支援的編碼格式是有限的,比如說latin就是不支援的,這個時候把原始編碼格式換個寫法就成功了,換成gbk或者gb18030都是可以成功轉碼的,不清楚為什麼。。
不論什麼編碼的檔案,open的時候模式指定為二進位制方式的話是都可以開啟的,開啟後對內容進行decode也是可以的,但是比較麻煩,而且decode的時候可能會遇到無法成功decode的內容,因此這個方法不是特別好。
中文的編碼格式gbk,gb18030,gb2312覆蓋的範圍是不一樣的,有時候gbk無法decode的內容,gb18030是可以成功decode的,自己嘗試吧
Python編碼問題
tag python,encoding,unicode 現有的字元編碼 ascii,gbk,gb2312,utf 8,unicode.unicode可以用來表示所有語言的字元,而且是定長雙位元組 也有四位元組的 編碼,包括英文本母在內。python中定義乙個unicode字串和定義乙個普通字串一樣簡...
python編碼問題
python裡面基本上要考慮三種編碼格式 1 原始檔編碼 在檔案頭部使用coding宣告。告訴python直譯器該 檔案所使用的字符集。usr bin python coding utf8 2 內部編碼 檔案中的字串,經過decode以後,被轉換為統一的unicode格式的內部資料,類似於u uni...
Python編碼問題
python裡面基本上要考慮三種編碼格式 1 原始檔編碼 在檔案頭部使用coding宣告。告訴python直譯器該 檔案所使用的字符集。usr bin python coding utf8 2 內部編碼 檔案中的字串,經過decode以後,被轉換為統一的unicode格式的內部資料,類似於u uni...