【问题标题】:Python Cyrillic encoding outputPython Cyrillic 编码输出
【发布时间】:2017-02-22 13:36:53
【问题描述】:

我刚开始学习 python,并且正在为字典做练习,但是由于我必须使用的示例代码是西里尔文,所以我遇到了一些编码问题。我有以下代码:

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

temperatures = {
    'София': -14,
    'Новосибирск': -31
}

print("-" * 20)
print(temperatures)

print("-" * 20)

key = 'Бургас'
if key in temperatures:
    print(temperatures[key])
else:
    print("No data for {}".format(key))

在添加 # -*- coding: utf-8 -*- 行之前,我遇到了 SyntaxError: Non-ASCII character '\xd0'。然而,现在错误消失了,但西里尔语单词的输出不正确。这是输出:

--------------------
{'\xd0\x9d\xd0\xbe\xd0\xb2\xd0\xbe\xd1\x81\xd0\xb8\xd0\xb1\xd0\xb8\xd1\x80\xd1\x81\xd0\xba': -31, '\xd0\xa1\xd0\xbe\xd1\x84\xd0\xb8\xd1\x8f': -14}
--------------------
No data for Бургас

所以,从 python dict 中打印出来的西里尔文单词被搞砸了,但 Бургас 行看起来是正确的。我尝试使用print(format(temperatures)),但输出是一样的。如果打印出一个西里尔字母,不应该全部打印出来吗?

【问题讨论】:

    标签: python encoding output


    【解决方案1】:

    抱歉,还不能发表评论:您的代码适用于我(arch linux 上的 emacs)。

    edit:我的默认 python 解释器是 Python3.6,它得到与 Python2.7 相同的输出。 Python 2.7 是必需的吗?

    【讨论】:

      【解决方案2】:

      假设你使用的是 Python 2,这里的输出是预期的

      • 打印字符串时直接打印
      • 当您打印字典时,使用repr 而不是str 打印的键(和值)。这就解释了为什么所有代码​​点高于 255 的字符都使用转义形式。

      如果你想在 Python 2 中显示字典,你必须手动

      h = temperatures
      print('{' + ', '.join((str(k)+ ': ' + str(h[k]) for k in h.keys())) + '}')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-12
        • 2020-03-12
        • 2013-03-22
        • 1970-01-01
        相关资源
        最近更新 更多