mes problèmes avec ConfigParser continuent. Il semble qu'il ne supporte pas très bien l'Unicode. Le fichier de configuration est en effet sauvegardé en UTF-8, mais lorsque ConfigParser le lit, il semble être encodé dans quelque chose d'autre. Je suppose qu'il était latin-1 et je thougt remplaçant optionxform
pourrait aider:ConfigParser avec les éléments 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")
Bien sûr, quand je lis la config je reçois:
'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
J'ai essayé deux différentes variantes de décodage 's' mais le point semble sans objet, car il devrait vraiment être un objet unicode depuis le début. Après tout, le fichier de configuration est UTF-8? J'ai confirmé que quelque chose ne va pas dans la façon dont ConfigParser lit le fichier en l'écrasant avec cette classe DummyConfig. Si j'utilise ça alors tout est bien unicode, bien et dandy.
-- 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
Toutes les idées ce qui pourrait être la cause ou des suggestions d'autres modules de configuration qui prend en charge mieux Unicode sont les bienvenus. Je ne veux pas utiliser sys.setdefaultencoding()
!
Le bonhomme de neige ne fait pas partie du 'latin-1' – u0b34a0f6ae
Ne jamais faire' l'exception Exception'; attraper l'exception réelle, vous savez comment gérer. –