在IPython笔记本中输出Unicode

8

我需要在IPython Notebook中使用Unicode(西里尔字母)字符。有没有办法输出Unicode字符串,而不是它们的Unicode或UTF-8代码?我希望下面的示例最后输出["АБ","ВГ"]

In [62]: "АБВ"

Out[62]: '\xd0\x90\xd0\x91\xd0\x92'

In [63]: u"АБВ"

Out[63]: u'\u0410\u0411\u0412'

In [64]: print "АБВ"

АБВ

In [65]: print u"АБВ"

АБВ

In [66]: print ["АБ","ВГ"]

['\xd0\x90\xd0\x91', '\xd0\x92\xd0\x93']

In [67]: print [u"АБ",u"ВГ"]

[u'\u0410\u0411', u'\u0412\u0413']
3个回答

5
在Python 2中(无论是否使用IPython),您可以使用“unicode_escape”字符串编解码器来模仿正确的Unicode“repr”:
In [1]: print repr([u"АБ",u"ВГ"]).decode('unicode_escape')

[u'АБ', u'ВГ']

https://docs.python.org/2/library/codecs.html#python-specific-encodings

与 Mark Ransom 的解决方案不同,这个方法适用于大多数常见数据类型(包括字典等)。注意,这会阻止 IPython 对大型数据结构的良好格式化。


如果在Python 2的Jupyter Notebook中无法正常工作,这意味着什么? - matanster
@matanster你能详细说明一下问题吗?在Jupyter 4.3.0和Python 2.7.12中,我仍然可以正常运行。 - futurulus

3

您需要切换到Python 3并获取Unicode字符串的良好repr


2
你说得对,我忘记了(或者还不知道)Python 3的这个优点。 - Mark Ransom

1
不要打印整个列表,而是单独打印每个元素。或将列表转换为字符串:
print u'[' + u','.join(string_list) + u']'

1
谢谢,我相信它会起作用,但我很乐意找到更好的解决方案——也许是ipython偏好设置中的某些选项,我不知道...例如,如果我需要打印更复杂的数据结构,使用这种方法将会很麻烦。这似乎是一个通用问题——应该有可能以一种漂亮的方式输出Unicode字符串。 - Ilya V. Schurov
@ilyavschurov,抱歉Python没有这样的选项。您正在看到“str”和“repr”的区别。 - Mark Ransom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接