Curiosity is insubordination in its purest form. -Vladimir Nabokov

miércoles, 31 de octubre de 2012

windows codepage 65001 is a pain

...so encode utf-8 to unicode as soon as possible!

tildes/eñes/etc no se imprimen bien. Existen bugs en python con la codificacion 65001 de Windows que se arrastran hasta la version 3 de la piton. Bugs como bugs.python.org/issue1602 continuan abiertos. Yo me las apañe asi:

Como ejemplo para gam (aunque es aplicable a cualquier cosa que maneje por ejemplo utf-8) lo que hice fue definir la siguiente funcion al principio del codigo:

def to_unicode_or_die(
  obj, encoding='utf-8'):
  if isinstance(obj, basestring):
    if not isinstance(obj, unicode):
      obj = unicode(obj, encoding)
      return obj
Y llamarla por ejemplo en la parte del codigo que imprimia por pantalla. Cambiando:
print '  ' + group['groupName'] + ' <' + group['groupId'] + '> (' + directIndirect + ' member)'
por:
print '  ' + to_unicode_or_die(group['groupName']) + ' <' + to_unicode_or_die(group['groupId']) + '> (' + directIndirect + ' member)'
Y asi funciona partiendo de cualquier codepage activo en el cmd/powershell/lo_que_sea

La funcion urllib2 en Linux/OSX bajando una pagina con codificacion utf-8 en la cabecera Content-Type lo manejan bien de serie, pero si no podemos dedicar un *nix, en windows lo mejor que se me ocurrio para solucionarlo fue convertir a Unicode ASAP.

Happy coding!

Related Posts by Categories