0

我遇到了 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?或者,我可以将这一切都写到一个文件中,然后通过电子邮件发送,如果这是更聪明的方法并且它是否可以解决我的编码问题。这些信息足够短,我只是将其存储在内存中,但我愿意被告知这是一种愚蠢的做事方式。

感谢您的阅读和任何建议。

4

1 回答 1

3

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

无论你在哪里打开配置文件,而不是这个:

open(config_path)

… 做这个:

open(config_path, encoding='utf-8')
于 2013-06-10T22:59:35.323 回答