En mi respuesta original, también sugerí unicodedata.normalize
. Sin embargo, decidí probarlo y resulta que no funciona con comillas Unicode. Hace un buen trabajo traduciendo caracteres Unicode acentuados, así que supongo que unicodedata.normalize
se implementa usando la unicode.decomposition
función, lo que me lleva a creer que probablemente solo puede manejar caracteres Unicode que son combinaciones de una letra y un signo diacrítico, pero no lo soy un experto en la especificación Unicode, por lo que podría estar lleno de aire caliente ...
En cualquier caso, puede utilizar unicode.translate
para tratar con caracteres de puntuación. El translate
método toma un diccionario de ordinales Unicode a ordinales Unicode, por lo que puede crear una asignación que traduzca la puntuación solo Unicode a puntuación compatible con 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!"'
Puede agregar más asignaciones de puntuación si es necesario, pero no creo que deba preocuparse necesariamente por el manejo de cada carácter de puntuación Unicode. Si usted no necesita acentos mango y otros signos diacríticos, todavía se puede utilizar unicodedata.normalize
para hacer frente a esos personajes.