假設一個人不能使用print
(從而享受自動編碼檢測的好處)。因此,我們留下了sys.stdout
。但是,sys.stdout
與not do any sensible encoding是如此愚蠢。通過Python中的sys.stdout編寫unicode字符串
現在一個讀取Python的wiki頁面PrintFails,去嘗試一下下面的代碼:
$ python -c 'import sys, codecs, locale; print str(sys.stdout.encoding); \
sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout);
但是這也不能正常工作(至少在Mac)。看到爲什麼:
>>> import locale
>>> locale.getpreferredencoding()
'mac-roman'
>>> sys.stdout.encoding
'UTF-8'
(UTF-8是什麼人的終端了解)。
所以一個改變了上述的代碼:
$ python -c 'import sys, codecs, locale; print str(sys.stdout.encoding); \
sys.stdout = codecs.getwriter(sys.stdout.encoding)(sys.stdout);
現在Unicode字符串被適當地發送到sys.stdout
,因此正確打印在終端上(sys.stdout
所連接的終端)。
這是在sys.stdout
中寫入unicode字符串的正確方法還是我應該做其他事情?
編輯:有時候 - 比如,輸出管道,以less
當 - sys.stdout.encoding
將None
。在這種情況下,上面的代碼將失敗。
S /我的/爲了一致性 – icedwater 2014-07-11 06:14:28