[英]Linux/Python: encoding a unicode string for print
我有一個相當大的python 2.6應用程序,其中包含大量的打印語句。 我一直在使用unicode字符串,它通常很好用。 但是,如果我重定向應用程序的輸出(如“myapp.py> output.txt”),那么我偶爾會遇到如下錯誤:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa1' in position 0: ordinal not in range(128)
我想如果有人將他們的LOCALE設置為ASCII,就會出現同樣的問題。 現在,我完全理解這個錯誤的原因。 我的Unicode字符串中有一些字符無法用ASCII編碼。 很公平。 但我希望我的python程序盡最大努力嘗試打印可理解的東西,可能會跳過可疑字符或用Unicode ID替換它們。
這個問題必須是常見的......處理這個問題的最佳做法是什么? 我更喜歡一種允許我繼續使用普通舊“打印”的解決方案,但我可以根據需要修改所有實例。
PS:我現在已經解決了這個問題。 解決方案既不是給出的答案。 我使用了http://wiki.python.org/moin/PrintFails中給出的方法,由ChrisJ在其中一條評論中給出。 也就是說,我用一個使用正確參數調用unicode編碼的包裝器替換sys.stdout。 效果很好。
如果要轉儲到ASCII終端,請使用unicode.encode
手動編碼,並指定應忽略錯誤。
u = u'\xa0'
u.encode('ascii') # This fails
u.encode('ascii', 'ignore') # This replaces failed encoding attempts with empty string
如果要存儲unicode文件,請嘗試以下操作:
u = u'\xa0'
print >>open('out', 'w'), u # This fails
print >>open('out', 'w'), u.encode('utf-8') # This is ok
我現在已經解決了這個問題。 解決方案既不是給出的答案。 我使用了http://wiki.python.org/moin/PrintFails中給出的方法,由ChrisJ在其中一條評論中給出。 也就是說,我用一個使用正確參數調用unicode編碼的包裝器替換sys.stdout。 效果很好。
通過方法包裝所有print語句執行任意unicode - > utf8轉換或最后的方法是在site.py中將Python默認編碼從ascii更改為utf-8。 一般來說,將未經過濾的unicode字符串打印到sys.stdout是一個壞主意,因為Python會觸發unicode字符串的隱含轉換為配置的默認編碼ascii。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.