Python 2.7 中 Jupyter Notebook 執行:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
後無法 print 輸出,PyCharm 正常。
reload(sys) 會重置 sys.stdout 為 IPython 內部對象,導致標準輸出流丟失。
import sys
# 保存原始流
stdi, stdo, stde = sys.stdin, sys.stdout, sys.stderr
reload(sys)
sys.setdefaultencoding('utf-8')
# 恢復流
sys.stdin, sys.stdout, sys.stderr = stdi, stdo, stde
實際上僅 stdout 被修改,三者恢復更保險。
Python 2.7 建議遷移至 Python 3,默認 UTF-8 無此問題。