Windows將Python程式執行結果轉導向輸出至編碼為UTF8的文字檔

如果想用「py test.py > test.log」這種方式(DOS redirect output to file)記錄執行結果至文字檔當Log,會發現這樣產生的檔案編碼會是ANSI(big5),而非UTF8,這樣會造成檔案開啟來裡面存的中文字都是亂碼,檔案編碼是ANSI,但文字是UTF8編碼,因此我們要在「py test.py > test.log」前再多加一行「set PYTHONIOENCODING=utf8」,這樣輸出的檔案編碼就會變成是UTF-8了!

方法一:

set PYTHONIOENCODING=utf8
py test.py > test.log

方法二:

py -X utf8 test.py > test.log

註:如果不用上面的方式輸出,如果文字中有cp950(big5)不存在的字元,就會出現類似「'cp950' codec can't encode character '\u8bfa' in position 161: illegal multibyte sequence」的錯誤。

Reference:
Error occurs when trying to redirect Python UTF-8 stdout to a file on Windows
Windows 系統上 Python 的文字輸出編碼

發佈留言