Приблизительно преобразование строки unicode в строку ascii в python

Не знаю, это тривиально или нет, но мне нужно будет преобразовать строку unicode в строку ascii, и я не хотел бы иметь все эти символы побега. Я имею в виду, возможно ли иметь "приблизительное" преобразование в какой-то довольно похожий символ ascii?

Например: Gavin OConnor преобразуется в Gavin O\x92Connor, но мне бы очень хотелось, чтобы он был просто преобразован в Gavin O'Connor. Это возможно? Кто-нибудь написал какую-нибудь утилиту, чтобы сделать это, или мне нужно вручную заменить все символы?

Большое спасибо! Marco

Ответы

Ответ 1

Используйте Unidecode для транслитерации строки.

>>> import unidecode
>>> unidecode.unidecode(u'Gavin O’Connor')
"Gavin O'Connor"

Ответ 2

b = str(a.encode('utf-8').decode('ascii', 'ignore'))

должен работать нормально.

Ответ 3

import unicodedata

unicode_string = u"Gavin O’Connor"
print unicodedata.normalize('NFKD', unicode_string).encode('ascii','ignore')

Вывод:

Gavin O'Connor

Здесь документ, описывающий формы нормализации: http://unicode.org/reports/tr15/

Ответ 4

Существует техника для снятия акцентов с персонажей, но другие персонажи должны быть напрямую заменены. Проверьте эту статью: http://effbot.org/zone/unicode-convert.htm

Ответ 5

Попробуйте замену простого символа

str1 = ""I am the greatest", said Gavin O’Connor"
print(str1)
print(str1.replace("’", "'").replace(""","\"").replace(""","\""))

PS: добавьте # -*- coding: utf-8 -*- в начало вашего файла .py, если вы получите error