簡體   English   中英

Linux / Python:編碼用於打印的unicode字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM