写入 ConfigObj 时出现 Ascii 编解码器错误
Ascii codec error when writing ConfigObj
我想要 read/write 俄语文本,例如:
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... 请帮助我。我做错了什么?
在编写配置之前,如果输出不是二进制类型,则对输出进行编码。这就是为什么它适用于 Python 2.
要正确处理 encoding
,您需要相应地进行设置:
obj = ConfigObj('config.ini', encoding='utf8')
差不多。因为您使用 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()
我想要 read/write 俄语文本,例如:
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... 请帮助我。我做错了什么?
在编写配置之前,如果输出不是二进制类型,则对输出进行编码。这就是为什么它适用于 Python 2.
要正确处理 encoding
,您需要相应地进行设置:
obj = ConfigObj('config.ini', encoding='utf8')
差不多。因为您使用 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()