2009-11-19 41 views
8

Tôi có một chuỗi dài mà tôi muốn mã hóa thành ascii. Tôi đang thực hiện:Mã hóa một chuỗi thành ascii

s = s.encode('ascii', 'replace') 

nhưng tôi nhận được:

'ascii' codec can't decode byte 0xc3 in position 2646: ordinal not in range(128) 

(Tôi cũng đã thử 'ignore' nhưng nó không giúp đỡ.)

Tôi đang làm gì sai?

Trả lời

10

Chuỗi của bạn là đã được mã hóa với một số mã hóa. Trước khi mã hóa nó thành ascii, bạn phải giải mã nó trước tiên.

Python là implicity cố gắng để giải mã nó (Đó là lý do tại sao bạn nhận được một UnicodeDecodeError không UnicodeEncodeError).

Bạn có thể giải quyết vấn đề bằng cách explicity giải mã bytestring bạn (bằng cách sử dụng mã hóa thích hợp) trước cố gắng để reencode nó để ascii.

Ví dụ:

s = s.decode('some_encoding').encode('ascii', 'replace') 

Sử dụng đúng mã hóa chuỗi của bạn được mã hóa ở vị trí đầu tiên, thay vì 'some_encoding'.

Bạn phải biết mã hóa chuỗi đang sử dụng trước khi bạn có thể giải mã chuỗi đó. Bạn lấy chuỗi từ đâu?

1

encode nên được sử dụng trên các đối tượng unicode để chuyển đổi thành str. Nếu bạn có đối tượng str, bạn nên sử dụng decode để chuyển đổi nó thành unicode.

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