Я знаю, что это старый поток, но я чувствовал себя обязанным упомянуть метод 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 , вы также можете установить для таблицы значение None и использовать deletechars для удаления ненужных символов, как в примерах, показанных в стандартных документах по адресу http://docs.python.org/library/stdtypes. html .
В строках Unicode таблица перевода представляет собой не 256-символьную строку, а dict с 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)
Преимущество translate в том, что вы можете преобразовать символы с диакритическими знаками в соответствующие символы ascii без акцента вместо того, чтобы просто удалять их или заменять на '?'. Это часто бывает полезно, например, для индексирования.