[英]Ascii codec error when writing ConfigObj
I wonna read/write russian text, for example: 我会读/写俄语文本,例如:
from configobj import ConfigObj
obj = ConfigObj('config.ini')
mydata = ['вася', 'петя']
obj['users'] = mydata
obj.write()
And I get error: 我得到错误:
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)
On python 2.7 everything works fine, but 3.4... Help me please. 在python 2.7上一切正常,但在3.4上...请帮助我。 What am I doing wrong?
我究竟做错了什么?
Before writing the config, the output is encoded if it isn't a binary type already. 在编写配置之前,如果输出还不是二进制类型,则对输出进行编码。 That's why it works on Python 2.
这就是为什么它可以在Python 2上运行的原因。
To handle the encoding
correctly, you need to set it accordingly: 为了正确处理
encoding
,您需要相应地进行设置:
obj = ConfigObj('config.ini', encoding='utf8')
Almost. 几乎。 Because you set a key using a UTF-8 string, your ConfigObj data structure now has a mix of Unicode and UTF-8.
由于您使用UTF-8字符串设置密钥,因此ConfigObj数据结构现在具有Unicode和UTF-8的混合。
The option default_encoding
controls the conversion from UTF-8 to Unicode. 选项
default_encoding
控制从UTF-8到Unicode的转换。 Then the option encoding
controls the conversion back from Unicode to UTF-8, which is what if finally written to the file. 然后,选项
encoding
控制从Unicode转换回UTF-8的过程,如果最终将其写入文件,该操作就会完成。
So, you want: 所以你要:
from configobj import ConfigObj
obj = ConfigObj('config.ini', default_encoding='utf8')
mydata = ['вася', 'петя']
obj['users'] = mydata
obj.write()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.