看似簡單的問題:我如何在Python3中使用print()
字符串?應該是一個簡單的:如何在Python3中打印()一個字符串?
print(my_string)
但這並不行。根據my_string
,環境變量的內容和使用,將拋出一個異常UnicodeEncodeError
操作系統:
>>> print("\u3423")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character '\u3423' in position 0: ordinal not in range(128)
有沒有解決這個乾淨的可移植的方法?
擴大一點:這裏的問題是Python3字符串包含Unicode編碼字符,而終端可以有任何編碼。如果幸運的話,您的終端可以處理字符串中包含的所有字符,並且一切都會正常,如果您的終端不能(例如有人設置LANG=C
),那麼您會得到一個例外。
如果手動編碼在Python3你可以提供忽略或替換unencodable字符的錯誤處理程序的字符串:
"\u3423".encode("ascii", errors="replace")
對於print()
我沒有看到一個簡單的方法在一個錯誤處理程序,甚至堵塞如果有的話,一個普通的錯誤處理程序看起來像一個可怕的想法,因爲它會修改數據。一個條件錯誤處理程序可能會工作(即檢查isatty()
,並根據該做什麼決定),但似乎非常難以通過所有的麻煩,只是print()
一個字符串,我甚至不確定它不會在一些失敗案例。
一個現實世界的例子這一問題將是例如這一個:
Python3: UnicodeEncodeError only when run from crontab
在Linux上適合我。您可能需要指定哪些操作系統和哪些環境變量給您帶來麻煩。 – John1024
在Mac OS X上適合我,打印出一個(中文?)字符? – Nitish
適用於我的Linux控制檯和X終端仿真器,但兩者都配置爲支持正確的UTF-8。我想知道,UTF-8在收到此錯誤的環境中是否能夠正常工作?也許它不僅僅是Python。 –