Trong khi chuyển mã từ Python 2 sang Python 3, tôi gặp phải vấn đề này khi đọc văn bản UTF-8 từ đầu vào tiêu chuẩn. Trong Python 2, điều này hoạt động tốt:Python 3: Cách chỉ định mã hóa stdin
for line in sys.stdin:
...
Nhưng Python 3 hy vọng ASCII từ sys.stdin, và nếu có ký tự ASCII trong đầu vào, tôi nhận được lỗi:
UnicodeDecodeError: 'ascii' codec can't decode byte .. in position ..: ordinal not in range(128)
Đối với một tệp thông thường, tôi sẽ chỉ định mã hóa khi mở tệp:
with open('filename', 'r', encoding='utf-8') as file:
for line in file:
...
Nhưng làm cách nào tôi có thể chỉ định mã hóa cho đầu vào chuẩn? Các bài đăng SO khác đã đề xuất sử dụng
input_stream = codecs.getreader('utf-8')(sys.stdin)
for line in input_stream:
...
Tuy nhiên, điều này không hoạt động trong Python 3. Tôi vẫn nhận được thông báo lỗi tương tự. Tôi đang sử dụng Ubuntu 12.04.2 và miền địa phương của tôi được đặt thành en_US.UTF-8.
Cảm ơn, điều này đã làm được điều này! –
Tương đương gần nhất cho python2.6 là gì? – bukzor
@bukzor: Tùy chọn tiếp theo: mở bộ mô tả tệp trực tiếp bằng 'io.open()'; '0' là' stdin': 'io.open (0)' trả về một đối tượng 'TextIOWrapper()'. –