Python 輸出中文亂碼問題 - Medium

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

反而開檔時,不指定 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



請為這篇文章評分?