Dans ma réponse originale, j'ai également suggéré unicodedata.normalize. Cependant, j'ai décidé de le tester et il s'avère que cela ne fonctionne pas avec les guillemets Unicode. Il fait un bon travail en traduisant les caractères Unicode accentués, donc je suppose qu'il unicodedata.normalizeest implémenté à l'aide de la unicode.decompositionfonction, ce qui me porte à croire qu'il ne peut probablement gérer que les caractères Unicode qui sont des combinaisons d'une lettre et d'un signe diacritique, mais je ne suis pas vraiment un expert sur la spécification Unicode, donc je pourrais juste être plein d'air chaud ...
Dans tous les cas, vous pouvez utiliser unicode.translatepour traiter les caractères de ponctuation à la place. La translateméthode prend un dictionnaire d'ordinaux Unicode en ordinaux Unicode, vous pouvez donc créer un mappage qui traduit la ponctuation Unicode uniquement en ponctuation compatible 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!"'
Vous pouvez ajouter plus de mappages de ponctuation si nécessaire, mais je ne pense pas que vous ayez nécessairement à vous soucier de la gestion de chaque caractère de ponctuation Unicode. Si vous ne devez accents de poignée et d' autres marques diacritiques, vous pouvez toujours utiliser unicodedata.normalizepour faire face à ces personnages.