3
我寫了一個小腳本,基本上在Windows終端(它使用希臘cp737代碼頁)打印一些信息。它本質上是某事像這樣:Python 3優雅的方式打印二進制輸出到終端
while True:
title = u'greek and other unichars follow:\t{}'.format(unicode_input())
print title.encode('cp737','ignore')
,輸出:
greek and other unichars follow: Καλημέρα!
其工作方式最希臘字母的預期,終端打印和忽略罕見的例外,它們不能被翻譯成更多的約束cp737。
現在python3打印字節,像你當 「unitext」 .encode(),輸出到stdout字節對象的原樣「:
b"greek and other unichars follow:\t\x89\x98\xa2\x9e\xa3\xe2\xa8\x98!"
印刷在終端直接UNICODE最終將導致一個 UnicodeEncode錯誤。
轉換unicode - > bytes(cp737,ignore) - > unicode,看起來很古怪。
那麼這樣做的優雅方式是什麼?
鏈接的答案使用'codecs.getwriter';你也可以'分離'並用另一個'io.TextIOWrapper'封裝緩衝區。 – eryksun
sys.stdout.buffer.write(字節)更接近我所尋找的。 它也是[文檔](docs.python.org/3/library/sys.html#sys.stdout)(雖然'可能適用的限制') 一些討論:bugs.python.org/issue18512 –