Я знаю, что это старая ветка, но я был вынужден упомянуть метод translate, который всегда является хорошим способом замены всех кодов символов выше 128 (или других, если это необходимо).
Использование : стр. перевод ( таблица [, deletechars] )
>>> trans_table = ''.join( [chr(i) for i in range(128)] + [' '] * 128 )
>>> 'Résultat'.translate(trans_table)
'R sultat'
>>> '6Â 918Â 417Â 712'.translate(trans_table)
'6 918 417 712'
Начиная с Python 2.6 , вы также можете установить для таблицы значение Нет и использовать deletechars для удаления ненужных символов, как в примерах, показанных в стандартных документах. в http://docs.python.org/library/stdtypes.html.
В случае строк Unicode таблица перевода представляет собой не строку из 256 символов, а диктовку с ord () соответствующих символов в качестве ключей. Но в любом случае получить правильную строку ascii из строки unicode достаточно просто, используя метод, упомянутый выше Truppo, а именно: unicode_string.encode ("ascii", "ignore")
В качестве резюме, если по какой-то причине вам абсолютно необходимо получить строку ascii (например, когда вы вызываете стандартное исключение с помощью raise Exception, ascii_message
), вы можете использовать следующую функцию:
trans_table = ''.join( [chr(i) for i in range(128)] + ['?'] * 128 )
def ascii(s):
if isinstance(s, unicode):
return s.encode('ascii', 'replace')
else:
return s.translate(trans_table)
Хорошая вещь в переводе заключается в том, что вы можете конвертировать акцентированные символы в соответствующие неакцентированные символы ascii вместо того, чтобы просто удалять их или заменять на '?'. Это часто полезно, например, для целей индексации.