2009-11-19 2 views
8

У меня есть длинная строка, которую я хочу кодировать в ascii. Я делаю:Кодирование строки в ascii

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

, но я получаю:

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

(Я также попытался 'ignore', но это не помогает.)

Что я делаю неправильно?

ответ

10

Ваша строка уже закодирована с некоторой кодировкой. Прежде чем кодировать его на ascii, вы должны сначала декодировать его.

Питон неявно пытается расшифровать его (Вот почему вы получите UnicodeDecodeError не UnicodeEncodeError).

Вы можете решить эту проблему путем декодирования в явной форме вашей байтовой строки (используя соответствующую кодировку) перед тем пытается перекодировать его в формате ASCII.

Пример:

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

Используйте правильную кодировку ваша строка была закодирована в первую очередь, вместо 'some_encoding'.

Вы должны знать, какая кодировка используется в строке, прежде чем вы сможете ее декодировать. Откуда вы взяли строку?

1

encode следует использовать на объектах unicode, чтобы преобразовать их в str. Если у вас есть объект str, вы должны использовать decode, чтобы преобразовать его в unicode.