mis problemas con ConfigParser continúan. Parece que no es compatible con Unicode muy bien. El archivo de configuración está realmente guardado como UTF-8, pero cuando ConfigParser lo lee, parece estar codificado en otra cosa. Supuse que era latino-1 y Me vestuario anulando optionxform
podría ayudar:ConfigParser con elementos Unicode
-- configfile.cfg --
[rules]
Häjsan = 3
☃ = my snowman
-- myapp.py --
# -*- coding: utf-8 -*-
import ConfigParser
def _optionxform(s):
try:
newstr = s.decode('latin-1')
newstr = newstr.encode('utf-8')
return newstr
except Exception, e:
print e
cfg = ConfigParser.ConfigParser()
cfg.optionxform = _optionxform
cfg.read("myconfig")
Por supuesto, cuando leí la configuración me sale:
'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
He intentado un par de diferentes variaciones de descifrando 's' pero el punto parece discutible, ya que realmente debería ser un objeto unicode desde el principio. Después de todo, el archivo de configuración es UTF-8? He confirmado que algo está mal en la forma en que ConfigParser lee el archivo anulándolo con esta clase DummyConfig. Si uso eso, entonces todo es lindo Unicode, fino y elegante.
-- config.py --
# -*- coding: utf-8 -*-
apa = {'rules': [(u'Häjsan', 3), (u'☃', u'my snowman')]}
class DummyConfig(object):
def sections(self):
return apa.keys()
def items(self, section):
return apa[section]
def add_section(self, apa):
pass
def set(self, *args):
pass
¿Alguna idea de lo que podría estar causando esto o sugerencias de otros módulos de configuración que mejor soporta Unicode son más que bienvenidos. No quiero usar sys.setdefaultencoding()
!
El muñeco de nieve no es parte de 'latino-1' – u0b34a0f6ae
Nunca jamás hacer' excepto Exception'; capte la excepción real que sabe cómo manejar. –