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 "?" ?¿Dónde está la "mejor ASCII de Python para esta base de datos Unicode"?
Respuesta
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/
Hm .. las diéresis alemanas se convierten en su carácter base en lugar de p. Ej. ö = oe, ä = ae, etc. – ThiefMaster
@ThiefMaster son esos equivalentes verdaderos en todos los idiomas? Tal vez Unidecode busca el mínimo común denominador. –
Unidecode es sin duda la solución independiente del idioma. Para una solución centrada en Alemania, convierta los charecters aplicables manualmente ('s/ö/oe /', etc.) antes de limpiar el resto con 'unidecode'. – alexis
Interesante pregunta.
Google me ayudó a encontrar lo que this page descibes utilizando el unicodedata module como los siguientes:
import unicodedata
unicodedata.normalize('NFKD', title).encode('ascii','ignore')
Útil, pero eso descarta la puntuación unicode . – joeforker
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 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 estoy no es 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. El método translate
toma un diccionario de ordinales Unicode a los ordinales Unicode, por lo tanto usted puede crear una correlación que se traduce sólo Unicode puntuacion a ASCII-compatibles puntuacion:
'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 añadir más asignaciones de puntuación, si es necesario, pero Don No creo que necesariamente tenga que preocuparse por manejar cada caracter de puntuación Unicode. Si do necesita manejar acentos y otras marcas diacríticas, igual puede usar unicodedata.normalize
para tratar esos caracteres.
Consulte también el paquete 'unidecode' – joeforker
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.
- 1. ¿Dónde obtiene glibc su base de datos de atributos Unicode?
- 2. ¿Dónde está la base de datos de tipo iPhone MIME?
- 3. Python no puede codificar unicode incorrecto para ascii
- 4. Python SQLite: base de datos está bloqueado
- 5. ¿Dónde está la base de datos Oracle Bug?
- 6. Corrupción de datos: ¿Dónde está la falla?
- 7. Cómo manejar caracteres Unicode (no ASCII) en Python?
- 8. Reemplazar caracteres no ASCII de una cadena Unicode en Python
- 9. C# ASCII o Unicode
- 10. ¿Dónde está la pérdida de memoria en esta función?
- 11. NSString - Unicode a ASCII equivalente
- 12. ¿Dónde puedo descargar la base de datos Northwind para Postgresql?
- 13. ¿Qué base de datos e idioma es mejor para manejar Unicode?
- 14. base de datos para Python Twisted
- 15. Unicode, UTF, ASCII, ANSI diferencias de formato
- 16. Python: ¿Dónde está freeze.py?
- 17. ¿Dónde poner la base de datos de información sensible
- 18. ¿Cuál es la "mejor" base de datos para incrustado?
- 19. Componentes internos de la base de datos: ¿por dónde empezar?
- 20. Mejor método para almacenar Enum en la base de datos
- 21. Mejor base de datos para la aplicación Node.js usando websockets
- 22. Unicode de Python Codificar error
- 23. ¿Dónde está el mejor lugar para localizar tipos de enum?
- 24. ¿Dónde almacena contraseñas de base de datos?
- 25. Base de datos de Python
- 26. ¿Dónde está la documentación de la API Python de WebDriver?
- 27. Python: Convertir Unicode en ASCII sin errores para el archivo CSV
- 28. ¿Es esta la mejor manera de garantizar que una "cadena" unicode de python esté codificada en utf-8?
- 29. Mejor estructura de base de datos para almacenar feeds RSS
- 30. ¿Cómo convierto el formato de un archivo de Unicode a ASCII utilizando Python?
eres valiente guerrero. Unicode es el archienemigo de Python. –
Las personas que encuentran esto pueden estar interesadas en [¿Cuál es la mejor manera de eliminar acentos en una cadena de Unicode de Python?] (Http://stackoverflow.com/q/517923/562769) –