Tôi sẽ bắt đầu bằng cách nói rằng tôi đã xem bài đăng này: Strange python print behavior with unicode, nhưng giải pháp được cung cấp ở đó (sử dụng PYTHONIOENCODING) không hoạt động đối với tôi.python unicode xử lý sự khác biệt giữa in và sys.stdout.write
Dưới đây là vấn đề của tôi:
Python 2.6.5 (r265:79063, Apr 9 2010, 11:16:46)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] on linux2
>>> a = u'\xa6'
>>> print a
¦
chỉ hoạt động tốt, tuy nhiên:
>>> sys.stdout.write(a)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa6' in position 0: ordinal not in range(128)
ném một lỗi. Bài đăng tôi liên kết ở trên cùng cho thấy rằng điều này là do mã hóa bảng điều khiển mặc định là 'ascii'. Tuy nhiên, trong trường hợp của tôi, không phải là:
>>> sys.stdout.encoding
'UTF-8'
Vì vậy, mọi suy nghĩ về những gì đang hoạt động ở đây và cách khắc phục sự cố này?
Cảm ơn D.
On python 2.7 với mã hóa thiết bị đầu cuối utf-8, mọi thứ dường như đang hoạt động. Bạn có thể thử sys.stdout.write (a.encode ("UTF-8")) và thử xem điều gì sẽ xảy ra? – yasar
Yep, đã hoạt động ... Rất tiếc, tôi vừa nhận ra rằng tôi đã sử dụng phiên bản Python sai để tạo mẫu. Tôi nên sử dụng 2.6.5. Vậy tại sao điều này xảy ra? Một lỗi trong 2,7 Python trước? –
Thận trọng, khi cố gắng viết để stdout, yout Python cố gắng mã hóa đối tượng unicode của bạn với ascii, nhưng thất bại thảm hại. Tôi không chắc chắn tại sao, nhưng tôi không làm điều đó :) – yasar