【Python 必會技巧】利用utf-8-sig 編碼格式解決寫入csv 文件 ...
文章推薦指數: 80 %
先舉個例子,分別以不指定編碼、指定編碼爲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]
延伸文章資訊
- 1Python中的字串操作和編碼Unicode詳解 - 程式前沿
Python在使用'utf-8'編碼寫入檔案時不會寫入BOM頭,但是如果指定編碼'utf-8-sig'則會迫使Python寫入一個BOM頭。 使用'utf-16-be'不會寫入一個BOM頭, ...
- 2问答- 腾讯云开发者社区-腾讯云
有没有一个解决方案可以接受任何已知的Python编码和输出为UTF-8而不需要BOM? ... fp = open('brh-m-157.json','rw') s = fp.read() u ...
- 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 文件來做個對比一、不指定編碼方式 ...
- 5What is the difference between utf-8 and utf-8-sig?
"sig" in "utf-8-sig" is the abbreviation of "signature" (i.e. signature utf-8 file). Using utf-8-...