ConfigParser에서의 문제가 계속됩니다. 유니 코드를 잘 지원하지 않는 것 같습니다. 구성 파일은 실제로 UTF-8로 저장되지만, ConfigParser가 그것을 읽을 때 다른 것으로 인코딩 된 것 같습니다. 나는 라틴어-1이었다 가정 내가 도움이 될 수 optionxform
을 무시 thougt : 물론유니 코드 항목이있는 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)
을 디코딩 's'하지만 요점은 사실 처음부터 유니 코드 개체 여야하기 때문에 문제는 아닌 것처럼 보입니다. 결국 설정 파일은 UTF-8입니까? ConfigParser가이 DummyConfig 클래스를 사용하여 파일을 스텁 (stubbing)하여 파일을 읽는 방식에 문제가 있다는 것을 확인했습니다. 그걸 사용하면 모든 것이 유니 코드, 멋지고 멋쟁이입니다.
-- 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
이 아이디어를 유발할 수있는 아이디어 나 유니 코드를 더 잘 지원하는 다른 구성 모듈의 제안을 환영합니다. sys.setdefaultencoding()
을 사용하고 싶지 않습니다!
을 눈사람은 라틴어-1' – u0b34a0f6ae
이제까지 Exception' 제외하고'행동을 절대하지 마십시오 '의 일부가 아닙니다; 당신이 처리하는 방법을 알고있는 실제 예외를 잡아라. –