В своем первоначальном ответе я также предложил unicodedata.normalize
. Однако я решил проверить это, и оказалось, что он не работает с кавычками Unicode. Он отлично справляется с переводом акцентированных символов Unicode, поэтому я предполагаю, что unicodedata.normalize
он реализован с использованием unicode.decomposition
функции, что заставляет меня думать, что он, вероятно, может обрабатывать только символы Unicode, которые представляют собой комбинации буквы и диакритического знака, но я не совсем эксперт по спецификациям Unicode, так что я мог бы просто болтать ...
В любом случае вы можете использовать unicode.translate
вместо них символы пунктуации. Этот translate
метод принимает словарь порядковых номеров Unicode в порядковые номера Unicode, поэтому вы можете создать отображение, которое переводит пунктуацию только Unicode в знаки препинания, совместимые с ASCII:
'Maps left and right single and double quotation marks'
'into ASCII single and double quotation marks'
>>> punctuation = { 0x2018:0x27, 0x2019:0x27, 0x201C:0x22, 0x201D:0x22 }
>>> teststring = u'\u201Chello, world!\u201D'
>>> teststring.translate(punctuation).encode('ascii', 'ignore')
'"hello, world!"'
При необходимости вы можете добавить больше сопоставлений пунктуации, но я не думаю, что вам обязательно нужно беспокоиться об обработке каждого отдельного символа пунктуации Unicode. Если вам действительно нужно обрабатывать акценты и другие диакритические знаки, вы все равно можете использовать их unicodedata.normalize
для работы с этими символами.