В своем первоначальном ответе я также предложил unicodedata.normalize
. Тем не менее, я решил проверить это, и оказалось, что он не работает с кавычками Unicode. Он хорошо справляется с переводом акцентированных символов Юникода, поэтому я предполагаю, что unicodedata.normalize
реализован с использованием функции unicode.decomposition
, что позволяет мне полагать, что она, вероятно, может обрабатывать только символы Юникода, которые представляют собой комбинации буквы и диакритического знака но я не очень разбираюсь в спецификациях 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!"'
Вы можете добавить больше отображений знаков препинания, если это необходимо, но я не думаю, что вам обязательно нужно беспокоиться об обработке каждого знака препинания в Юникоде. Если вам do необходимо обрабатывать ударения и другие диакритические знаки, вы все равно можете использовать unicodedata.normalize
для работы с этими символами.