meine Probleme mit ConfigParser fortsetzen. Es scheint Unicode sehr gut zu unterstützen. Die Konfigurationsdatei wird zwar als UTF-8 gespeichert, aber wenn ConfigParser sie liest, scheint sie in etwas anderes kodiert zu sein. Ich nahm an, es war Latein-1 und ich thougt optionxform
zwingende helfen könnte:ConfigParser mit Unicode-Elementen
-- 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")
Natürlich, wenn ich die Config las ich bekommen:
'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
ich ein paar verschiedene Varianten ausprobiert habe Decodierung 's' aber der Punkt scheint strittig, da es eigentlich ein Unicode-Objekt von Anfang an sein sollte. Immerhin ist die Konfigurationsdatei UTF-8? Ich habe bestätigt, dass etwas nicht stimmt, wenn ConfigParser die Datei liest, indem er sie mit dieser DummyConfig-Klasse ausgibt. Wenn ich das benutze dann ist alles schön Unicode, fein und 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
Irgendwelche Ideen, was diese oder Vorschläge von anderen Konfigurationsmodule, die Unicode besser unterstützt werden verursachen könnte sehr willkommen. Ich möchte nicht sys.setdefaultencoding()
verwenden!
Der Schneemann ist nicht Teil von 'Latin-1 ' – u0b34a0f6ae
Nie tun' außer Exception'; Fange die tatsächliche Ausnahme, mit der du umgehen kannst. –