我在某处丢失了unicode字符(Python3)

时间:2013-06-10 22:57:14

标签: python python-3.x

我遇到的问题是unicode字符有点笨拙。我有一个配置文件,为我提供变量location。配置文件顶部有# -*- coding utf-8 -*-file -bi config-file-name告诉我编码是us-ascii,无论我做什么(包括iconvrecode(linux) ),它拒绝改变这一点。

无论如何,我检索了一些带有unicode字符的数据(在下面传递为input_data),当我直接查看数据时数据看起来很好。但是,在下面的某个地方我嚼了它:

def make_message(input_data):

    messagestring = ''

    if isinstance(input_data, list):
        messagestring = '\n'.join(input_data)

    elif isinstance(input_data, dict):
        for key, val in input_data.items():
            messagestring += key + '\n'
            if isinstance(val, dict):
                for newkey, newval in val.items():
                    messagestring += newkey + ' ' + newval + '\n'
            else:
                messagestring += val + '\n'
    return messagestring

稍后,我通过以下方式调用此方法:

weather_msg = location + '\n' + make_message(message)

我认为我的配置文件的编码(“位置”来自)强制整个字符串变成ascii,但这只是一个猜测,在我的谷歌搜索中,我无法弄清楚这是怎么回事事情应该有效。

我尝试了很多东西,包括尝试编码location并且我搜索了很多字符编码,但是我无法找回我的unicode字符,我无法弄清楚我在哪里他们正在咀嚼他们。

任何人都可以看到一个明显的错误,我正在某个地方迫使我的unicode数据进入ascii吗?或者,我可以将这一切写入文件然后通过电子邮件发送,如果这是更聪明的方法,如果它可以解决我的编码问题。信息很短,我只是将它存储在内存中,但我很乐意被告知这是一种愚蠢的做事方式。

感谢阅读和任何建议。

1 个答案:

答案 0 :(得分:3)

Python仅尊重源文件中的编码声明注释,而不是作为数据打开的文本文件。

无论您打开配置文件的哪个位置,而不是:

open(config_path)

......这样做:

open(config_path, encoding='utf-8')