Кодирование строки в ascii - PullRequest
       11

Кодирование строки в ascii

10 голосов
/ 19 ноября 2009

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

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

но я получаю:

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

(я тоже пробовал 'ignore', но это не помогает.)

Что я делаю не так?

Ответы [ 2 ]

14 голосов
/ 19 ноября 2009

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

Python - это неявность , пытающаяся его расшифровать (поэтому вы получаете UnicodeDecodeError не UnicodeEncodeError).

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

Пример: * * один тысяча двадцать-одна

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

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

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

1 голос
/ 09 апреля 2011

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

...