python – 使用StringIO for ConfigObj和Unicode

前端之家收集整理的这篇文章主要介绍了python – 使用StringIO for ConfigObj和Unicode前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在尝试使用StringIO来提供ConfigObj.
我想在单元测试中执行此操作,以便我可以动态地模拟配置“文件”,具体取决于我要在配​​置对象中测试的内容.

我在配置模块中有很多事情要处理(我正在阅读其他应用程序的几个conf文件,聚合和“格式化”信息).但是,在测试中,我面临着来自地狱的unicode错误.我想我已经把我的问题归结为最小的功能代码,我已经提取并过度简化了这个问题的目的.

我正在做以下事情:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import configobj
import io

def main():
    """Main stuff"""

    input_config = """
    [Header]
    author = PloucPlouc
    description = Test config

    [Study]
    name_of_study = Testing
    version = 9999
    """

    # Just not to trust my default encoding
    input_config = unicode(input_config,"utf-8")

    test_config_fileio = io.StringIO(input_config)    
    print configobj.ConfigObj(infile=test_config_fileio,encoding="UTF8")

if __name__ == "__main__":
    main()

它产生以下回溯:

Traceback (most recent call last):
File "test_configobj.py",line 101,in 

我在linux上使用Python-2.7.2(32位).我对控制台和编辑器(Kile)的语言环境设置为fr_FR.utf8.

我以为我能做到这一点.

io.StringIO documentation开始,我得到了这个:

The StringIO object can accept either Unicode or 8-bit strings,but mixing the two may take some care.

ConfigObj documentation开始,我可以这样做:

06002

this

infile: None

You don’t need to specify an infile. If you omit it,an empty ConfigObj will be created. infile can be :

06003

‘encoding’: None

By default ConfigObj does not decode the file/strings you pass it into Unicode [8]. If you want your config file as Unicode (keys and members) you need to provide an encoding to decode the file with. This encoding will also be used to encode the config file when writing.

我的问题是为什么会产生这个?还有哪些(简单的)Unicode处理无法理解?…

通过查看answer,我改变了:

input_config = unicode(input_config,"utf8")

to(导入编解码器模块breforehand):

input_config = unicode(input_config,"utf8").strip(codecs.BOM_UTF8.decode("utf8","strict"))

为了摆脱可能包含的字节顺序标记,但它没有帮助.

非常感谢

注意:如果我使用StringIO.StringIO而不是io.StringIO,我有相同的回溯.

最佳答案
这一行:

input_config = unicode(input_config,"utf8")

将您的输入转换为Unicode,但是这一行:

print configobj.ConfigObj(infile=test_config_fileio,encoding="UTF8")

声明输入是UTF-8编码的字节串.该错误表示在预期字节字符串时传递了Unicode字符串,因此注释掉上面的第一行应该可以解决问题.我目前没有configobj所以无法测试它.

原文链接:https://www.f2er.com/python/439347.html

猜你在找的Python相关文章