【Python 技巧】利用utf-8-sig 編碼格式解決寫入csv 文件亂碼問題- 台 ...
文章推薦指數: 80 %
先舉個例子,分別以不指定編碼、指定編碼爲utf-8、指定編碼爲utf-8-sig 三種方式來做比較,再將寫入csv 文件和txt 文件來做個對比一、不指定編碼方式,直接存入csv ...
請輸入正確的登錄賬號或密碼
註冊
忘記密碼
首頁
python3技巧系列
正文
【Python技巧】利用utf-8-sig編碼格式解決寫入csv文件亂碼問題
原創
TRHX
2020-02-2103:35
先舉個例子,分別以不指定編碼、指定編碼爲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就能避免這個錯誤。
點贊
1
收藏
分享
文章舉報
TRHX
發佈了145篇原創文章·獲贊511·訪問量45萬+
私信
關注
Python3技巧系列
utf-8-sig
utf-8
亂碼
csv
python
發表評論
登录
所有評論
還沒有人評論,想成為第一個評論的人麼?請在上方評論欄輸入並且點擊發布.
相關文章
python設置庫搜索路徑
簡介
設置庫搜索路徑.
常有ldconfig,LD_LIBRARY_PATH,LD_RUN_PATH等.
python
也可以通過os.environ設置,但是當前不生效.
需要子進程才生效.
案
原創
2022-04-3014:21:11
PIL操作圖像,輕量級圖像庫
PIL
啥
PythonImagingLibrary.
python圖像處理庫,讓腳本擁有圖像處理能力.(opencv太大了,下載容易失敗.但是支持操作多.)
下載
簡單使用建議下載低版本的.pyth
原創
2022-04-3014:21:10
OrangePiZERO安裝ArmbianLinux(UbuntuFocal)
實驗環境:
硬件:OrangePiZEROLTS512M
系統:Armbian_21.08.1_Orangepizero_focal_current_5.10.60
結果:安裝系統,配置阿里雲源,NTP時間同步,安裝開發工具,搭建P
原創
2022-04-3014:09:10
oeasy教您玩轉python-002-#你好世界-各位同學除夕快樂,除舊佈新之時預祝能玩
你好世界🥊
回憶上次內容
瞭解了Python
安裝了Python
進入了Python
退出了Python
可是我們什麼也沒有做就離開了IDLE遊樂場!
你好世界
#首先進入Python3
python3
我們想
原創
2022-04-3013:33:42
oeasy教您玩轉python-010-#不換行輸出
不換行輸出
回憶上次內容
\n就是換行
他對應着ascii字符的代碼是(10)10進制
他的英文是LF,意思是LineFeed
這樣我就可以自由的控制哪裏換行了!
可以做下面這個框架標題嗎?🤔
嘗
原創
2022-04-3013:33:41
oeasy教您玩轉python-006-#helloworld
HelloWorld!
回憶上次內容
python3的程序是一個5.3M的可執行文件
python3裏面全都是cpu指令
可以執行的那種指令
我們可以把指令對應的彙編找到
objdump-d~/pytho
原創
2022-04-3013:33:37
oeasy教您玩轉python-001-#換行插入
先跑起來🥊
Python
什麼是Python?
Python很好用
適合初學者
而且在各個領域都很強大
後來居上
上圖可以點開
python3早已有之最終逆風翻盤
當然java也是非常偉大的對手
歷
原創
2022-04-3013:33:34
pythonmap和for效率對比
importtime
importnumpyasnp
y=list(np.arange(1,77777))
deffunc(x):
globaly
ifxiny:
原創
2022-04-3013:23:05
pythonlist排序、隨機
=======================排序===============
升序:使用sort進行升序操作,支持數字、字母等,默認是根據該元素的assic碼進行升序排序,也可以在排序的時候指定排序規則,例如 l_test
原創
2022-04-3013:22:58
pythonList的加法、乘法、extend、append比較
=================================【加法、乘法、extend】
extend:是把新的參數裏面的列表項循環地放到主體上,效率更高
加法:本質是在heap(堆)區中新建列表完成加法,具體操作是新建一個列表
原創
2022-04-3013:22:42
Django|後臺顯示縮略圖
1,創建model類
classArticleImg(models.Model):
pass
1.1,新建圖片字段
classArticleImg(models.Model):
img_title=models.CharF
原創
2022-04-3012:31:51
django獲取訪問者IP地址
使用Django獲取訪問者的IP
ifrequest.META.get('HTTP_X_FORWARDED_FOR'):
ip=request.META.get("HTTP_X_FORWARDED_FOR")
else:
原創
2022-04-3012:31:45
【Java數據結構及算法實戰】系列009:Java隊列03——數組實現的阻塞隊列ArrayBlockingQueue
顧名思義,ArrayBlockingQueue是基於數組實現的有界阻塞隊列。
該隊列對元素進行FIFO排序。
隊列的首元素是在該隊列中駐留時間最長的元素。
隊列的尾部是在該隊列中停留時間最短的元素。
新的元素被插入到隊列的尾部,隊列檢索操作獲取隊列
原創
2022-04-3012:25:48
快速計算平均值和方差的算法
通常計算n個數的平均值和方差的方法,需要保存這n個數,然後求和,先求出平均,再計算方差。
對於算力和存儲很有限,而n又很大的情況,就難以處理。
那是否有快速簡便的計算平均值和方差的算法,不需要保存所有n個數即可計算呢?答案是肯定的。
下面給
原創
2022-04-3012:19:27
WhiteSourceSAST—信息安全測試工具
WhiteSource是一家AST(應用程序安全測試)領域的專業供應商,專注於信息安全諮詢與缺陷研究。
WhiteSource提供的SAST產品旨在使用靜態應用程序安全測試(SAST、白盒測試)技術,分析和測試應用程序的安全
原創
2022-04-3011:47:38
T
TRHX
24小時熱門文章
最新文章
Python數據分析三劍客之NumPy(一):理解NumPy,數組基礎
【Python技巧】[iforiinrange(1,10)]—列表解析式,列表中使用for循環
【Python標準庫】安全哈希與摘要算法庫—hashlib
【Python標準庫】時間相關的函數庫—time
【Python標準庫】僞隨機數生成庫—random
最新評論文章
[2022]TopRatedCheckPoint156-315.80ExamQuestions
QualifiedWritingServiceinAustraliacanallowstudentstoachievebettergrades
Takeassignmenthelpertoresolvethepaperquerieseasily
UpdatedCompTIADA0-001ExamQuestions(2022)
美國黑金效果和其它速效藥的不同之處
MicrosoftDP-500PDFQuestion[2022]-SecretToPassExamInFirstAttempt-[PremiumDumps]
延伸文章資訊
- 1【Python 必會技巧】利用utf-8-sig 編碼格式解決寫入csv 文件 ...
先舉個例子,分別以不指定編碼、指定編碼爲utf-8、指定編碼爲utf-8-sig 三種方式來做比較,再將寫入csv 文件和txt 文件來做個對比一、不指定編碼方式 ...
- 2Python中的字串操作和編碼Unicode詳解 - 程式前沿
本文主要給大家介紹了關於 Python中的字串操作和編碼Unicode的一些知識 ... 會寫入BOM頭,但是如果指定編碼'utf-8-sig'則會迫使Python寫入一個BOM頭。
- 3Python中utf-8与utf-8-sig两种编码格式的区别 - CSDN博客
- 4python 字符串编码,区别utf-8 和utf-8-sig - 静悟生慧- 博客园
要打开的路径比预期A.txt多了一串字符"\ufeff", 显然无法正确打开文件. 解决方案:. 在读取B.txt 时,指定编码方式为"utf-8-sig"即可 如下 ...
- 5Python如何利用utf-8-sig编码格式解决写入csv文件乱码问题
这篇文章主要介绍了Python如何利用utf-8-sig编码格式解决写入csv文件乱码问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章 ...