【問題】
python輸出的csv文件用excel打開,里面的中文會變成亂碼势木,但用window下的記事本或mac下的numbers打開就正常顯示易猫。
原因是python輸出的文件是utf-8編碼寫入的,excel默認以gbk方式讀取晾匠,導致亂碼發(fā)生场晶。
【解決方法1】文件產出時encoding設置為utf-8-sig????
用excel打開csv時鳍贾,excel會先檢查文件的第一個字符,來了解這個文件是什么編碼方式,如果這個字符是BOM半醉,excel就知道用utf-8的方式打開這個文件。python自帶了處理BOM的編碼方式uft-8-sig板驳,因此只需要在文件產出時將encoding設置為utf-8-sig样勃。
如果文件不是由python產出的,只需要以utf-8方式讀入再以utf-8-sig方式存儲即可
【解決方法2】懶人法嗦董,適用只含簡體中文的文件
用記事本打開母谎,點擊另存為,右下角編碼方式選擇“ANSI”京革,這個過程是把這個文件改成gbk編碼格式奇唤,excel就是默認用gbk方式打開的。
參考:Python寫的csv文件匹摇,如何讓 Excel 雙擊打開不亂碼咬扇? - 云+社區(qū) - 騰訊云
對編碼格式一竅不通的可以閱讀以下網(wǎng)頁
python筆記——二進制和文件編碼_砍柴姑娘Jourosy的博客-CSDN博客
編碼方式之ASCII、ANSI来惧、Unicode概述 - 藍海人 - 博客園
【簡單總結】:
1. 首先需要了解 字符集 和 字符編碼 兩個概念冗栗,字符集定義了字符和二進制的一一對應關系,字符編碼規(guī)定了如何將字符的編號存儲到計算機中供搀。
2. Unicode是字符集隅居,包含了全球文字的唯一編碼,utf-8是編碼方式葛虐,將unicode以某種方式存儲到計算機中胎源。
3. 有些字符集和編碼是結合在一起的,稱作字符集還是編碼都無所謂屿脐,比如ASCII涕蚤,GBK
4. ANSI是各個國家地區(qū)不同擴展編碼方式的總稱宪卿,互不兼容(可以看出來通用性沒有utf好)
5. 不同編碼方式在轉換時,通常需要以unicode作為中間編碼万栅,即先將其他編碼的字符串解碼(decode)成unicode佑钾,再從unicode編碼(encode)成另一種編碼。