Python西里尔语编码输出

时间:2017-02-22 13:36:54

标签: python encoding output

我刚开始学习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:非ASCII字符' \ 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中打印出来的Cyrillic中的单词混乱,但行Бургас出现正确。我尝试使用print(format(temperatures)),但输出是相同的。如果它打印出一个西里尔字,那不应该打印所有这些字吗?

2 个答案:

答案 0 :(得分:0)

很抱歉,暂且无法发表评论:您的代码适用于我(在arch linux上使用emacs)。

编辑:我的默认python解释器是Python3.6,它与Python2.7的输出相同。 Python 2.7是否需要?

答案 1 :(得分:0)

假设您使用的是Python 2,此处的输出符合预期

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

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

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