type open escape caracteres python unicode ascii

open - ¿Dónde está la "mejor ASCII para esta base de datos Unicode" de Python?



type unicode python (4)

Tengo un texto que usa signos de puntuación Unicode, como doble comilla izquierda, comilla simple derecha para apóstrofo, y así sucesivamente, y lo necesito en ASCII. ¿Python tiene una base de datos de estos personajes con obvios sustitutos de ASCII, así que puedo hacerlo mejor que convertirlos a todos en "?" ?


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 unicodedata.normalize que unicodedata.normalize se implementa utilizando la función unicode.decomposition , lo que me lleva a pensar que probablemente solo pueda manejar caracteres Unicode que sean combinaciones de una letra y una marca diacrítica, pero no soy realmente un experto en la especificación Unicode, así que podría estar lleno de aire caliente ...

En cualquier caso, puede usar unicode.translate para tratar los caracteres de puntuación en su lugar. El método de translate toma un diccionario de ordinales Unicode para los ordinales de Unicode, por lo que puede crear una asignación que traduzca la puntuación de Unicode a la 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 necesariamente deba preocuparse por manejar cada carácter de puntuación Unicode. Si necesita manejar acentos y otras marcas diacríticas, aún puede usar unicodedata.normalize para tratar esos caracteres.


Hay una discusión adicional sobre esto en http://code.activestate.com/recipes/251871/ que tiene la solución NFKD y algunas formas de hacer una tabla de conversión, para cosas como ± => +/- y otros caracteres que no sean letras.


Interesante pregunta.

Google me ayudó a encontrar esta página que describe el uso del módulo unicodedata de la siguiente manera:

import unicodedata unicodedata.normalize(''NFKD'', title).encode(''ascii'',''ignore'')


Unidecode parece una solución completa. Convierte presupuestos sofisticados a citas ascii, acentúa caracteres latinos a incómodos e incluso intenta la transliteración para tratar con caracteres que no tienen equivalentes ASCII. De esta forma, tus usuarios no tienen que ver muchos? cuando tenía que pasar su texto a través de un sistema ascii heredado de 7 bits.

>>> from unidecode import unidecode >>> print unidecode(u"/u5317/u4EB0") Bei Jing

http://www.tablix.org/~avian/blog/archives/2009/01/unicode_transliteration_in_python/