ConfigParser mit Unicode-Elementen

Meine Probleme mit ConfigParser gehen weiter. Es scheint, dass Unicode nicht sehr gut unterstützt wird. Die Konfigurationsdatei wird zwar als UTF-8 gespeichert, aber wenn ConfigParser sie liest, scheint sie in etwas anderes codiert zu sein. Ich nahm an, dass es Latin-1 war und ich dachte darüber nachoptionxform könnte helfen:

-- 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") 

Wenn ich die Konfiguration lese, erhalte ich natürlich:

'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)

Ich habe ein paar verschiedene Dekodierungsvarianten ausprobiert, aber der Punkt scheint fraglich zu sein, da es eigentlich von Anfang an ein Unicode-Objekt sein sollte. Immerhin ist die Konfigurationsdatei UTF-8? Ich habe bestätigt, dass etwas in der Art und Weise nicht stimmt, in der ConfigParser die Datei liest, indem er sie mit dieser DummyConfig-Klasse ausliest. Wenn ich das benutze, ist alles schön Unicode, gut 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  

Alle Ideen, die dazu führen könnten, oder Vorschläge anderer Konfigurationsmodule, die Unicode besser unterstützen, sind herzlich willkommen. Ich möchte nicht verwendensys.setdefaultencoding()!

Antworten auf die Frage(6)

Ihre Antwort auf die Frage