2010-02-08 31 views
20

Tôi gặp sự cố liên quan đến Unicode trong Python. Tôi có thể in tiền phạt đầu ra trong một thiết bị đầu cuối thông thường, nhưng nếu tôi chuyển hướng stdout nơi khác (hoặc chụp nó với các mô-đun subprocess), tôi nhận được một UnicodeEncodeError:UnicodeEncodeError khi chuyển hướng stdout

$ cat example.py 
print u'Example: \u00F1' 
$ python example.py 
Example: ñ 
$ python example.py > /dev/null 
Traceback (most recent call last): 
    File "example.py", line 1, in <module> 
    print u'Example: \u00F1' 
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf1' in position 9: ordinal not in range(128) 

Tại sao điều này? Làm thế nào tôi có thể sửa chữa nó?

+1

http://stackoverflow.com/questions/492483/setting-the-correct-encoding-when-piping-stdout-in-python về cơ bản là cùng một câu hỏi, câu trả lời đã giải quyết được vấn đề tôi gặp phải (hy vọng). – dbr

Trả lời

8

Ống không dẫn đến đầu cuối không có mã hóa, do đó bạn cần kiểm tra sys.stdout.isatty() và mã hóa nếu cần.

+3

Hoặc (thậm chí tốt hơn) luôn mã hóa. –

+0

Thông tin thêm về cách xác định mã hóa: http://www.python.org/dev/peps/pep-0263/ –

+1

Không, PEP 263 chỉ định về mã hóa * nguồn * và không có gì liên quan đến mã hóa đầu ra. –

Các vấn đề liên quan