tôi nhận được một lỗi trong một hệ thống sản xuất, mà tôi không thể sinh sản trong môi trường phát triển:Làm thế nào để tạo lại UnicodeEncodeError?
with io.open(file_name, 'wt') as fd:
fd.write(data)
Ngoại lệ:
File "/home/.../foo.py", line 18, in foo
fd.write(data)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 6400: ordinal not in range(128)
Tôi đã cố gắng nhưng rất nhiều nhân vật lạ vào biến data
.
Nhưng cho đến bây giờ tôi không thể tạo lại số UnicodeEncodeError
.
Điều gì cần phải ở trong data
để nhận được UnicodeEncodeError
?
Cập nhật
python -c 'import locale; print locale.getpreferredencoding()'
UTF-8
Update2
Nếu tôi gọi locale.getpreferredencoding()
qua vỏ và thông qua yêu cầu web, mã hóa là "UTF-8".
Tôi đã cập nhật xử lý ngoại lệ trong mã của mình và đăng nhập getpreferredencoding()
từ một số ngày. Bây giờ nó đã xảy ra một lần nữa (đến nay tôi không thể ép buộc hoặc tái tạo điều này), và mã hóa là "ANSI_X3.4-1968"!
Tôi không có đầu mối khi mã hóa này được đặt ....
Điều này đặt vấn đề của tôi theo một hướng khác. Để lại câu hỏi này vô ích. Vấn đề của tôi bây giờ là: Mã hóa ưa thích bị thay đổi ở đâu? Nhưng đây không phải là một phần của câu hỏi này.
Xin cảm ơn, đối với tất cả những ai
bạn biết đấy, không có thêm bất kỳ thông tin cho phép chúng ta tạo lại vấn đề của bạn (bạn đã biết, một [MCVE]), không có câu trả lời khác để cung cấp cho. Tôi rất hoài nghi rằng * chỉ với mã mà bạn đã hiển thị * rằng 'locale.getpreferredencoding()' thực sự là UTF-8 * khi bạn nhấn lỗi đó *. –
Bạn cũng có thể chỉ cần kiểm tra mã hóa đã được chọn cho tệp; 'io.TextIOWrapper' có thuộc tính' encoding'. Nó sẽ được đặt thành ASCII trong trường hợp cụ thể này. –