【问题标题】:Ascii codec error when writing ConfigObj编写 ConfigObj 时出现 Ascii 编解码器错误
【发布时间】:2015-08-25 15:45:03
【问题描述】:

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

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-3.x utf-8 ascii codec configobj


    【解决方案1】:

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

    要正确处理encoding,您需要进行相应的设置:

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

    【讨论】:

      【解决方案2】:

      几乎。因为您使用 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()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-02
        • 2016-11-15
        • 1970-01-01
        • 1970-01-01
        • 2017-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多