Soporte Unicode para pyrtf-ng
Este post fue migrado de un blog hecho con Wordpress. Si se ve mal, dejame un comentario y lo arreglo.
pyrtf-ng es un módulo para Python que permite generar archivos en formato RTF en forma dinámica. Esta semana empecé a probarlo con la idea de usarlo para generar documentos de texto con formato (Word-like) en forma dinámica.
Al intentar instalarlo tuve algunos problemas , se los comenté al autor y le sugerí soluciones. Rápidamente estas modificaciones estuvieron hechas en el repositorio del proyecto.
Una vez que tuve la librería instalada y los ejemplos corriendo, empecé a modificar algunos para experimentar un poco. Cuando quise generar un documento que contenga una palabra con tilde (cómo canción
), el programa tiró una horrible excepción. Esto hacía que desechara totalmente la idea de usar este software.
Leí sobre la codificación utilizada por el formato RTF y descubrí que no soporta Unicode en forma nativa, pero si mediante una secuencia de escape de la forma: \uxxxx?
en dónde xxxx
es un entero con signo de 16 bits correspondiente al caracter que se quiere representar. Ejemplo: á.
Pedí instrucciones al autor de la librería, quien me indicó que partes del código tendría que revisar par incluir la funcionalidad de soportar Unicode. Luego de algunas horas empapándome en la arquitectura de clases de pyrtf, tenía un parche listo para ser aplicado e incorporar la funcionalidad. Hoy fue incluido en la versión en desarrollo de la librería.
Código
Un pequeño snippet que muestra el algoritmo básico para pasar de un string Unicode a su representación codificada en RTF:
encoded = ''.join(['\u%s?' % str(ord(b)) for b in base])
Datos
- pyrtf-ng es mantenido por Duncan Mc Greggor y está basado en PyRTF, un proyecto que ya no es mantenido.
- Se encuentra en activo desarrollo: modificación del estilo del código y refactoring.
- También puede ser modificado mediante bazaar en lauchpad.
Comentarios
Comments powered by Disqus