2014-10-27 13 views
13

tôi vĩnh viễn nhận được lỗi sau:UnicodeEncodeError: 'ascii' codec không thể mã hóa kí tự u ' xe4'

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 27: ordinal not in range(128) 

Tôi đã cố gắng

  1. x.encode("ascii", "ignore")
  2. x.encode("utf-8")
  3. x.decode("utf-8")

Tuy nhiên, không có gì hoạt động.

+2

'u '\ xe4'.encode (' ascii ',' ignore ')' hoạt động tốt cho tôi. Chúng ta cần thêm bối cảnh để xem vấn đề thực sự là gì. –

+2

# 2 cũng "hoạt động" ở chỗ nó tạo ra kết quả lỗi w/o; không thể nói nếu đó là kết quả mong muốn. –

Trả lời

9

Bạn cần phải khám phá, trong đó mã hóa là nhân vật này tại nguồn.

Tôi đoán đây là ISO-8859-1 (ngôn ngữ châu Âu), trong trường hợp đó là "ä", nhưng bạn nên kiểm tra. Nó cũng có thể là cyrillic hoặc greek.

Xem http://en.wikipedia.org/wiki/ISO/IEC_8859-1 cho một danh sách đầy đủ của các nhân vật trong mã hóa này.

Sử dụng thông tin này, bạn có thể yêu cầu Python để chuyển đổi nó:

Trong Python 2,7

>>> s = '\xe4' 
>>> t = s.decode('iso-8859-1') 
>>> print t 
ä 
>>> for c in t: 
... print ord(c) 
... 
228 
>>> u = t.encode('utf-8') 
>>> print u 
ä 
>>> for c in bytes(u): 
... print ord(c) 
... 
195 
164 

Chuỗi t được mã hóa trong nội bộ tiêu chuẩn ISO-8859-1 trong Python. Chuỗi u được nội UTF-8, và nhân vật mà mất 2 byte trong UTF-8. Chú cũng là hướng dẫn print "biết" làm thế nào để hiển thị các mã hóa khác nhau.

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