Python 輸出中文亂碼問題 - Medium
文章推薦指數: 80 %
反而開檔時,不指定 encoding='utf8' 的話卻可以正常開啟,為何? 原因. Python3 寫檔時其實蠻聰明的,如果不指定encode 的話,會參考系統語系。
當指定utf ...
GetunlimitedaccessOpeninappHomeNotificationsListsStoriesWritePython輸出中文亂碼問題Python是一個便於快速開發的程式語言,因為一些歷史因素,目前主流分成2.x,3.x兩大版本。
本文是以Python3為主,說明為何輸出文字檔會被視為亂碼,以及解決方法。
情境使用預設方法寫檔,包含中文字,在Windows環境下用Excel開啟後,變成亂碼。
withopen('file.csv','w',encoding='utf8')asff:ff.write('中文字1')開啟之後反而變成亂碼反而開檔時,不指定encoding='utf8'的話卻可以正常開啟,為何?原因Python3寫檔時其實蠻聰明的,如果不指定encode的話,會參考系統語系。
當指定utf-8時,就會改用這種編碼寫入文字。
但是Excel就比較硬,通常都是預設自己語系,除非文件有標頭檔。
可以用Notepad++來開啟,看編碼就可以發現一件事:Notepad++開啟是正常的,而且編碼是utf-8我們輸出的檔案雖然確實是utf-8格式,但是卻沒有標頭檔。
解決方法Notepad++如果只是一次性的,其實上面的圖片已經告訴你如何處理了。
Notepad++有提供轉換功能,我們只需要按下轉換至UTF-8碼格式並存檔,便可以解決。
自己加標頭檔如果程式輸出很多檔案,或是經常重新輸出,我們當然是不希望都要重覆上面的動作。
這時候可以選擇自己加上標頭檔,也就是在輸出文件的第一行加上ff.write('\ufeff')withopen('file.csv','w',encoding='utf8')asff:ff.write('\ufeff')ff.write('中文字1')如此一來,excel就知道這個檔案是utf-8格式,便能以正確的編碼開啟。
改用UTF-16格式這是一個更簡單而且更泛用的做法,自己加標頭檔還需要記得那些特殊字元,又或是要import相關的package,但是改用utf-16就更簡單了。
withopen('file.csv','w',encoding='utf16')asff:ff.write('中文字1')以上是今天替同事解決亂碼問題,順便做個記錄。
不管用哪個方法,都能解決亂碼。
不過utf-16為何可以無須手動加標頭檔,本篇就先不解釋了參考資料:stakeoverflowUTF-16Morefrom黃凱鴻FollowLovepodcastsoraudiobooks?Learnonthegowithournewapp.TryKnowableAboutHelpTermsPrivacyGettheMediumappGetstarted黃凱鴻3FollowersFollowHelpStatusWritersBlogCareersPrivacyTermsAboutKnowable
延伸文章資訊
- 1你還在為Python中文亂碼而感到煩惱?今天老司機給你講講!
其實我們可以簡單理解為,utf-8是為了節省Unicode的存儲資源和傳輸流量而產生的一種編碼方式,其所能表述的字符範圍與Unicode是相等的,但是相對於Unicode ...
- 2徹底搞懂python 中文亂碼問題(深入分析) - 程式人生
強制轉換為gbk編碼,上一步已經從utf-8轉換為unicode了,從unicode是編碼的過程,通過encode實現。 view source. print? 1, # encoding:ut...
- 3Day27 Python 基礎- 字符轉編碼操作 - iT 邦幫忙
上面那個看起來很像亂碼(不是亂馬),其實是unicode格式,証明我們已經確實的把 UTF-8 decode Unicode 編碼了,再來就是要把 Unicode encode gbk # -*...
- 4python如何解決中文亂碼問題 - 人人焦點
強制轉換爲gbk編碼,上一步已經從utf-8轉換爲unicode了,從unicode是編碼的過程,通過encode實現。 # encoding:utf-8 s = "中文" u = s.deco...
- 5python如何解决中文乱码问题
文件存储设为utf-8格式,编码声明为utf-8。||出现汉字的地方前面加u。||不同编码之间不能直接转换,要经过unicode中间跳转。||cmd下不支持utf-8编码。