Khi dẫn đầu ra của chương trình Python, trình thông dịch Python bị nhầm lẫn về mã hóa và đặt nó thành Không có. Điều này có nghĩa là một chương trình như thế này:
# -*- coding: utf-8 -*-
print u"åäö"
sẽ hoạt động tốt khi chạy bình thường, nhưng không thành công với:
UnicodeEncodeError: 'ascii' codec không thể mã hóa ký tự u '\ xa0' ở vị trí 0: thứ tự không nằm trong phạm vi (128)
khi được sử dụng trong một chuỗi ống.
Cách tốt nhất để làm cho công việc này khi đường ống là gì? Tôi có thể chỉ bảo nó sử dụng bất cứ thứ gì mã hóa shell / filesystem / bất cứ thứ gì đang sử dụng không?
Các đề xuất mà tôi đã thấy cho đến nay là sửa đổi trực tiếp trang web của bạn hoặc mã hóa mã hóa mặc định bằng cách sử dụng bản hack này:
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
print u"åäö"
Có cách nào tốt hơn để làm cho đường ống làm việc?
chcp 65001
trước khi thực thi tập lệnh của mình. Điều này có thể có vấn đề, nhưng nó thường giúp ích và không yêu cầu gõ nhiều (ít hơn set PYTHONIOENCODING=utf_8
).
setx PYTHONENCODING utf-8
làm cho nó vĩnh viễn nếu bạn muốn lưu gõ.