编写ConfigObj时出现Ascii编解码器错误

时间:2015-08-25 15:45:04

标签: python-3.x utf-8 ascii codec configobj

我想读/写俄语文本,例如:

from configobj import ConfigObj
obj = ConfigObj('config.ini')
mydata = ['вася', 'петя']
obj['users'] = mydata
obj.write()

我得到错误:

obj.write()
File "/usr/lib/python3.4/site-packages/configobj-5.0.6-py3.4.egg/configobj.py", line 2119, in write
UnicodeEncodeError: 'ascii' codec can't encode characters in position 10-13: ordinal not in range(128)

在python 2.7上一切正常,但3.4 ...请帮帮我。我做错了什么?

2 个答案:

答案 0 :(得分:0)

在编写配置之前,如果输出不是二进制类型,则对输出进行编码。这就是它适用于Python 2的原因。

要正确处理encoding,您需要相应地设置它:

obj = ConfigObj('config.ini', encoding='utf8')

答案 1 :(得分:0)

几乎。因为您使用UTF-8字符串设置密钥,所以ConfigObj数据结构现在混合使用Unicode和UTF-8。

选项default_encoding控制从UTF-8到Unicode的转换。然后选项encoding控制从Unicode转换回UTF-8,这是最终写入文件的。

所以,你想要:

from configobj import ConfigObj
obj = ConfigObj('config.ini', default_encoding='utf8')
mydata = ['вася', 'петя']
obj['users'] = mydata
obj.write()