我的ConfigParser問題仍在繼續。它似乎不太支持Unicode。配置文件確實保存爲UTF-8,但是當ConfigParser讀取它時,它似乎被編碼爲其他內容。我以爲這是Latin-1的和我thougt覆蓋optionxform
可以幫助:帶有Unicode項目的ConfigParser
-- 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")
當然,當我讀到的配置,我得到:
'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
我已經嘗試了幾個不同的變化解碼',但這一點似乎沒有意義,因爲它從一開始就應該是一個unicode對象。畢竟,配置文件是UTF-8?我已經確認ConfigParser通過用這個DummyConfig類對其進行存檔來讀取文件的方式是錯誤的。如果我使用的話,那麼一切都很好unicode,罰款和丹迪。
-- 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
任何想法可能會導致這或支持Unicode更好的是最歡迎的其他配置模塊建議。我不想用sys.setdefaultencoding()
!
雪人不是'拉丁1' – u0b34a0f6ae 2009-10-30 13:23:17
永遠不要做'除了Exception'一部分;趕上你知道如何處理的實際例外。 – 2010-03-23 07:51:55