Python利用utf-8-sig 編碼格式解決寫入csv 檔案亂碼問題
文章推薦指數: 80 %
先舉個例子,分別以不指定編碼、指定編碼為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
延伸文章資訊
- 1utf-8和utf-8-sig的区别 - 简书
前言:在写入csv文件中,出现了乱码的问题。 解决:utf-8改为utf-8-sig 区别如下: 1、”utf-8“ 是以字节为编码单元,它的字节顺序在所有系统中都是一样 ...
- 2Python利用utf-8-sig 編碼格式解決寫入csv 檔案亂碼問題
先舉個例子,分別以不指定編碼、指定編碼為utf-8、指定編碼為utf-8-sig 三種方式來做比較,再將寫入csv 檔案和txt 檔案來做個對比.
- 3What is the difference between utf-8 and utf-8-sig? - Quora
UTF-8 is a scheme for encoding any Unicode character (represented by a number between 0 and 0xFFF...
- 4【Python 必會技巧】利用utf-8-sig 編碼格式解決寫入csv 文件 ...
先舉個例子,分別以不指定編碼、指定編碼爲utf-8、指定編碼爲utf-8-sig 三種方式來做比較,再將寫入csv 文件和txt 文件來做個對比一、不指定編碼方式 ...
- 5Python中的字串操作和編碼Unicode詳解 - 程式前沿
Python在使用'utf-8'編碼寫入檔案時不會寫入BOM頭,但是如果指定編碼'utf-8-sig'則會迫使Python寫入一個BOM頭。 使用'utf-16-be'不會寫入一個BOM頭, ...