У своїй оригінальній відповіді я також запропонував 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
щоб мати справу з цими персонажами.