简体   繁体   English

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

[英]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.

相关问题 urllib请求中的python 3.6 ascii编解码器错误 - python 3.6 ascii codec error in urllib request 用变音符号写入CSV文件会导致“ UnicodeEncodeError:'ascii'编解码器无法编码字符” - Writing CSV file with umlauts causing “UnicodeEncodeError: 'ascii' codec can't encode character” 在ipdb中打印变量时出错:UnicodeEncodeError:'ascii'编解码器无法在位置314编码字符'\\ u22f1':序数不在范围(12)中 - Error when printing a variable in ipdb: UnicodeEncodeError: 'ascii' codec can't encode character '\u22f1' in position 314: ordinal not in range(12) ascii 编解码器无法解码 - ascii codec can't decode python3打印函数发出'ascii'编解码器无法编码字符错误 - python3 print function emits 'ascii' codec can't encode character error UnicodeEncodeError: 'ascii' 编解码器在 UTF-8 语言环境中打印时无法编码字符 '\\xe9' - UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' when printing in UTF-8 locale 通过 apche wsgi 运行 python3 代码时显示 ascii 编解码器错误 - ascii codec error is showing while running python3 code via apche wsgi 错误UnicodeDecodeError:读取CSV时出现“ utf-8”编解码器 - error UnicodeDecodeError: 'utf-8' codec when reading CSV UnicodeDecodeError:'ascii' 编解码器无法解码位置 433 中的字节 0xe2:创建 conda 环境时序号不在范围内(128) - UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 433: ordinal not in range(128) when creating a conda environment Python3 日志记录:UnicodeEncodeError:'ascii' 编解码器在从 apache/php 调用时无法编码字符 '€' - Python3 logging: UnicodeEncodeError: 'ascii' codec can't encode character '\u20ac' when called from apache/php
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM