【Python 技巧】利用utf-8-sig 編碼格式解決寫入csv 文件亂碼問題- 台 ...

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

先舉個例子,分別以不指定編碼、指定編碼爲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]



請為這篇文章評分?