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.normalize
est implémenté à l'aide de la unicode.decomposition
fonction, 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.translate
pour traiter les caractères de ponctuation à la place. La translate
mé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.normalize
pour faire face à ces personnages.