我在生產系統中,這是我不能在開發環境中重現得到一個錯誤:如何重現UnicodeEncodeError?
with io.open(file_name, 'wt') as fd:
fd.write(data)
例外:
File "/home/.../foo.py", line 18, in foo
fd.write(data)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 6400: ordinal not in range(128)
我已經嘗試過,但很多奇怪的字符到變量data
。
但是到目前爲止,我無法複製UnicodeEncodeError
。
什麼需要在data
得到UnicodeEncodeError
?
python -c 'import locale; print locale.getpreferredencoding()'
UTF-8
UPDATE2
如果通過殼和經由web請求調用locale.getpreferredencoding()
,編碼是 「UTF-8」。
我在我的代碼中更新了我的異常處理,並在幾天後記錄了getpreferredencoding()
。現在它再次發生(到現在爲止我無法強制或重現此),並且編碼是「ANSI_X3.4-1968」!
我不知道哪裏該編碼獲取設置....
這使我的問題變成一個不同的方向。離開這個問題沒用。我現在的問題是:首選編碼在哪裏被修改?但這不是這個問題的一部分。
非常感謝你們,所有誰
你知道,沒有任何更多的信息,讓我們重現您的問題(你知道,一個[MCVE]),還有沒有其他的回答來給。我非常懷疑,*只有你顯示的代碼*當locale.getpreferredencoding()實際上是UTF-8 *時,你遇到那個錯誤*。 –
您也可以檢查爲文件選擇的編碼; 'io.TextIOWrapper'有一個'encoding'屬性。在這個特定的情況下它將被設置爲ASCII。 –