【Python 必會技巧】利用utf-8-sig 編碼格式解決寫入csv 文件 ...

文章推薦指數: 80 %
投票人數:10人

先舉個例子,分別以不指定編碼、指定編碼爲utf-8、指定編碼爲utf-8-sig 三種方式來做比較,再將寫入csv 文件和txt 文件來做個對比一、不指定編碼方式 ... 請輸入正確的登錄賬號或密碼 註冊 忘記密碼 首頁 #奇技淫巧 正文 【Python必會技巧】利用utf-8-sig編碼格式解決寫入csv文件亂碼問題 原創 TRHX•鲍勃 2020-06-2023:29 先舉個例子,分別以不指定編碼、指定編碼爲utf-8、指定編碼爲utf-8-sig三種方式來做比較,再將寫入csv文件和txt文件來做個對比 一、不指定編碼方式,直接存入csv文件 importcsv withopen('test.csv','w')asfp: writer=csv.writer(fp) writer.writerow(['漢語','俄語','韓語','日語','英語']) writer.writerow(['愛你','люблютебя','사랑해요','愛しています','loveyou']) 此時運行程序會報以下錯誤: UnicodeEncodeError:'gbk'codeccan'tencodecharacter'\uc0ac'inposition14:illegalmultibytesequence 二、指定編碼爲utf-8,再存入csv文件 接下來嘗試將內容以utf-8編碼方式存入test.csv文件中,可以看到除了英文,其他的全都是亂碼: importcsv withopen('test.csv','w',encoding='utf-8')asfp: writer=csv.writer(fp) writer.writerow(['漢語','俄語','韓語','日語','英語']) writer.writerow(['愛你','люблютебя','사랑해요','愛しています','loveyou']) 三、指定編碼爲utf-8-sig,再存入csv文件 當將編碼方式換成utf-8-sig之後,顯示爲正常: importcsv withopen('test.csv','w',encoding='utf-8-sig')asfp: writer=csv.writer(fp) writer.writerow(['漢語','俄語','韓語','日語','英語']) writer.writerow(['愛你','люблютебя','사랑해요','愛しています','loveyou']) 四、不指定編碼方式,直接存入txt文件 withopen('test.txt','w')asfp: fp.write('愛你,люблютебя,사랑해요,愛しています,loveyou') 和存入csv文件一樣,也會報以下錯誤: UnicodeEncodeError:'gbk'codeccan'tencodecharacter'\uc0ac'inposition16:illegalmultibytesequence 五、指定編碼爲utf-8/utf-8-sig,再存入txt文件 以utf-8或者utf-8-sig編碼方式存入test.txt文件中,內容都是完全正常的: withopen('test.txt','w',encoding='utf-8')asfp: fp.write('愛你,люблютебя,사랑해요,愛しています,loveyou') withopen('test.txt','w',encoding='utf-8-sig')asfp: fp.write('愛你,люблютебя,사랑해요,愛しています,loveyou') utf-8與utf-8-sig有什麼區別? utf-8以字節爲編碼單元,它的字節順序在所有系統中都是一樣的,沒有字節序問題,也因此它實際上並不需要BOM; uft-8-sig中sig全拼爲signature,即帶有簽名的utf-8(UTF-8withBOM); BOM全稱ByteOrderMark,字節順序標記,出現在文本文件頭部,Unicode編碼標準中用於標識文件是採用哪種格式的編碼。

爲什麼寫入csv文件要用utf-8-sig編碼? Excel在讀取csv文件的時候是通過讀取文件頭上的BOM來識別編碼的,如果文件頭無BOM信息,則默認按照Unicode編碼讀取。

當我們使用utf-8編碼來生成csv文件的時候,並沒有生成BOM信息,Excel就會自動按照Unicode編碼讀取,就會出現亂碼問題了。

爲什麼寫入txt文件要用utf-8編碼? 在寫入txt文件時,Windows會默認轉碼成gbk,遇到某些gbk不支持的字符就會報錯,在打開文件時就聲明編碼方式爲utf-8就能避免這個錯誤。

#奇技淫巧 發表評論 登录 所有評論 還沒有人評論,想成為第一個評論的人麼?請在上方評論欄輸入並且點擊發布. 相關文章 【Python必會技巧】[iforiinrange(1,10)]—列表解析式,列表中使用for循環 經常會看到類似於[iforiinrange(1,10)]的表達式,這種表達式稱爲列表解析(ListComprehensions),類似的還有字典解析、集合解析等等。

列表解析式是將一個列表(實際上適用於任何可迭代對象 TRHX•鲍勃 2020-06-2023:29:12 【Python必會技巧】copy模塊中copy()與deepcopy()函數的區別 Python中賦值語句不復制對象,而是在目標和對象之間創建綁定關係。

對於自身可變或者包含可變項的集合對象,開發者有時會需要生成其副本用於改變操作,進而避免改變原對象。

copy模塊提供了通用的淺層複製copy()和深層複製 TRHX•鲍勃 2020-06-2023:29:12 【Python必會技巧】使用zip()函數對序列進行壓縮和解壓操作 zip()函數用於將可迭代的對象作爲參數,將對象中對應的元素打包成一個個元組,然後返回由這些元組組成的列表。

如果各個迭代器的元素個數不一致,則返回列表長度與最短的對象相同。

利用*號操作符,可以將元組解壓爲列表。

zip( TRHX•鲍勃 2020-06-2023:29:11 【Python技巧】[iforiinrange(1,10)]—列表解析式,列表中使用for循環 TRHX 2020-03-0902:22:51 【Python必會技巧】[iforiinrange(1,10)]—列表解析式,列表中使用for循環 經常會看到類似於[iforiinrange(1,10)]的表達式,這種表達式稱爲列表解析(ListComprehensions),類似的還有字典解析、集合解析等等。

列表解析式是將一個列表(實際上適用於任何可迭代對象 TRHX•鲍勃 2020-06-2023:29:12 【Python必會技巧】copy模塊中copy()與deepcopy()函數的區別 Python中賦值語句不復制對象,而是在目標和對象之間創建綁定關係。

對於自身可變或者包含可變項的集合對象,開發者有時會需要生成其副本用於改變操作,進而避免改變原對象。

copy模塊提供了通用的淺層複製copy()和深層複製 TRHX•鲍勃 2020-06-2023:29:12 【Python必會技巧】使用zip()函數對序列進行壓縮和解壓操作 zip()函數用於將可迭代的對象作爲參數,將對象中對應的元素打包成一個個元組,然後返回由這些元組組成的列表。

如果各個迭代器的元素個數不一致,則返回列表長度與最短的對象相同。

利用*號操作符,可以將元組解壓爲列表。

zip( TRHX•鲍勃 2020-06-2023:29:11 【Python技巧】[iforiinrange(1,10)]—列表解析式,列表中使用for循環 TRHX 2020-03-0902:22:51 T TRHX•鲍勃 24小時熱門文章 最新文章 COVID-19肺炎疫情數據實時監控(python爬蟲+pyecharts數據可視化+wordcloud詞雲圖) 華中科技大學文華學院CSDN高校俱樂部成立啦! Python數據分析三劍客之Pandas(九):時間序列 Python數據分析三劍客之Pandas(十):數據讀寫 Python數據分析三劍客之Pandas(七):合併數據集 最新評論文章 [2022]TopRatedCheckPoint156-315.80ExamQuestions QualifiedWritingServiceinAustraliacanallowstudentstoachievebettergrades Takeassignmenthelpertoresolvethepaperquerieseasily UpdatedCompTIADA0-001ExamQuestions(2022) 美國黑金效果和其它速效藥的不同之處 MicrosoftDP-500PDFQuestion[2022]-SecretToPassExamInFirstAttempt-[PremiumDumps]



請為這篇文章評分?