2011-06-30 43 views
8

Tôi đang đọc tệp chứa từ tiếng Rumani bằng Python với tệp.readline(). Tôi gặp sự cố với nhiều ký tự do mã hóa.UnicodeDecodeError: codec 'ascii' không thể giải mã

Ví dụ:

>>> a = "aberație" #type 'str' 
>>> a -> 'abera\xc8\x9bie' 
>>> print sys.stdin.encoding 
UTF-8 

Tôi đã thử encode() với utf-8, CP500 vv, nhưng nó không hoạt động.

Tôi không thể tìm thấy mã hóa ký tự phù hợp mà tôi phải sử dụng là gì?

cảm ơn trước.

Edit: Mục đích là để lưu trữ từ từ tập tin trong một dictionnary, và khi in nó, để có được aberaţie và không phải là 'Abera \ xc8 \ x9bie'

Trả lời

15

Bạn đang cố gắng để làm gì?

Đây là một tập hợp các byte:

BYTES = 'abera\xc8\x9bie' 

Đó là một tập hợp các byte đại diện cho một mã hóa utf-8 của chuỗi "aberaţie". Bạn decode các byte để có được chuỗi unicode của bạn:

>>> BYTES 
'abera\xc8\x9bie' 
>>> print BYTES 
aberație 
>>> abberation = BYTES.decode('utf-8') 
>>> abberation 
u'abera\u021bie' 
>>> print abberation 
aberație 

Nếu bạn muốn lưu trữ các chuỗi unicode vào một tập tin, sau đó bạn phải mã hóa nó sang một định dạng byte đặc biệt lựa chọn của bạn:

>>> abberation.encode('utf-8') 
'abera\xc8\x9bie' 
>>> abberation.encode('utf-16') 
'\xff\xfea\x00b\x00e\x00r\x00a\x00\x1b\x02i\x00e\x00' 
Các vấn đề liên quan