Python利用utf-8-sig 編碼格式解決寫入csv 檔案亂碼問題

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

先舉個例子,分別以不指定編碼、指定編碼為utf-8、指定編碼為utf-8-sig 三種方式來做比較,再將寫入csv 檔案和txt 檔案來做個對比. 程式人生>程式設計>Python利用utf-8-sig編碼格式解決寫入csv檔案亂碼問題 Python利用utf-8-sig編碼格式解決寫入csv檔案亂碼問題 阿新•來源:網路•發佈:2020-02-21 先舉個例子,分別以不指定編碼、指定編碼為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(['漢語','loveyou']) 三、指定編碼為utf-8-sig,再存入csv檔案 當將編碼方式換成utf-8-sig之後,顯示為正常: importcsv withopen('test.csv',encoding='utf-8-sig')asfp: writer=csv.writer(fp) 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檔案中,內容都是完全正常的: ithopen('test.txt',encoding='utf-8')asfp: fp.write('愛你,loveyou') withopen('test.txt',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就能避免這個錯誤。

知識點擴充套件: utf-8和utf-8-sig的區別 前言:在寫入csv檔案中,出現了亂碼的問題。

解決:utf-8改為utf-8-sig 區別如下: 1、”utf-8“是以位元組為編碼單元,它的位元組順序在所有系統中都是一樣的,沒有位元組序問題,因此它不需要BOM,所以當用"utf-8"編碼方式讀取帶有BOM的檔案時,它會把BOM當做是檔案內容來處理,也就會發生類似上邊的錯誤. 2、“uft-8-sig"中sig全拼為signature也就是"帶有簽名的utf-8”,因此"utf-8-sig"讀取帶有BOM的"utf-8檔案時"會把BOM單獨處理,與文字內容隔離開,也是我們期望的結果. 總結 以上所述是小編給大家介紹的Python利用utf-8-sig編碼格式解決寫入csv檔案亂碼問題,希望對大家有所幫助,也非常感謝大家對我們網站的支援! csvutf-8-sig檔案亂碼編碼 python使用Geany編輯器配置方法 «上一篇 python程式設計進階之異常處理用法例項分析 下一篇» 相關推薦 .NET垃圾回收器原理及使用EntityFrameworkCore工具使用命令列js的Map函式使用方法詳解關於指令重排現象的兩個階段詳解shell程式設計入門之變數,字串,陣列,函式使用方法總結.NET正則表示式最佳用法WPF使用AForge呼叫攝像頭JS跨域之window.name實現的跨域資料傳輸 搜尋 熱門文章 AF&SD 2019-12-25 iOS自動釋放池autoreleasepool(二) 2019-12-25 Flutter-生命週期 2019-12-25 ADS 基礎教學 Mysql入門 Sql入門 Android入門 Docker入門 Go語言入門 Ruby程式入門 Python入門 Python進階 Django入門 Python爬蟲入門 PHP技巧 ADS 人氣文章 Flutter-生命週期 2019-12-25 iOS自動釋放池autoreleasepool(二) 2019-12-25 AF&SD 2019-12-25 關於指令重排現象的兩個階段詳解 2022-01-31 面試遇到Runtime的第二天-isa和meta-Class 2020-06-24 Qt對話方塊窗體關閉時,如何自動銷燬窗體類物件、清空記憶體 2020-06-22 shell程式設計入門之變數,字串,陣列,函式使用方法總結 2022-01-31 [技術乾貨]Zabbix通過api監控k8s 2020-06-22 .NET正則表示式最佳用法 2022-01-31 custom-自定義API操作 2020-06-22 熱門標籤 JavaPython演算法vuewin10JavaScriptMySQLC++jsAndroidiOSSpring資料結構C語言資料庫前端springbootC#筆記字串 ADS



請為這篇文章評分?