Python 如何打印包含unicode值的容器对象?

Python 如何打印包含unicode值的容器对象?,python,unicode,Python,Unicode,下面的代码 # -*- coding: utf-8 -*- x = (u'abc/αβγ',) print x print x[0] print unicode(x).encode('utf-8') print x[0].encode('utf-8') …产生: (u'abc/\u03b1\u03b2\u03b3',) abc/αβγ (u'abc/\u03b1\u03b2\u03b3',) abc/αβγ 有没有办法让Python打印出来 ('abc/αβγ',) 这不需要我自己构建元组

下面的代码

# -*- coding: utf-8 -*-
x = (u'abc/αβγ',)
print x
print x[0]
print unicode(x).encode('utf-8')
print x[0].encode('utf-8')
…产生:

(u'abc/\u03b1\u03b2\u03b3',)
abc/αβγ
(u'abc/\u03b1\u03b2\u03b3',)
abc/αβγ
有没有办法让Python打印出来

('abc/αβγ',)
这不需要我自己构建元组的字符串表示吗?(我的意思是将
“(“
”,“
”,编码值,
“,
”,
,“
”,和
”)串在一起。

顺便说一句,我使用的是Python 2.7.1


谢谢!

您可以使用
'raw\u unicode\u escape'
解码元组的
str
表示

In [25]: print str(x).decode('raw_unicode_escape')
(u'abc/αβγ',)

我不这么认为-元组的
\uuuu repr\uuu()
是内置的,AFAIK只需为每个元组项调用
\uuuu repr\uuu
。对于unicode字符,您将获得转义序列


(除非Gandaro的解决方案适合您——我无法让它在普通python shell中工作,但这可能是我的语言环境设置,也可能是ipython中的特殊功能。)

以下内容应该是一个良好的开端:

>>> x = (u'abc/αβγ',)
>>> S = type('S', (unicode,), {'__repr__': lambda s: s.encode('utf-8')})
>>> tuple(map(S, x))
(abc/αβγ,)
我们的想法是创建一个unicode的子类,它的
\uuu repr\uuu()
更符合您的喜好

仍在试图找出如何最好地将结果括在引号中,这适用于您的示例:

>>> S = type('S', (unicode,), {'__repr__': lambda s: "'%s'" % s.encode('utf-8')})
>>> tuple(map(S, x))
('abc/αβγ',)
…但如果字符串中只有一个引号,则看起来很奇怪:

>>> S("test'data")
'test'data'

显式优于隐式,而<代码>打印< /代码>将获得任意对象的<代码> ReP</代码>,通常只输出格式正确的代码> STR < /代码> s。我不认为这是“规则”。始终是最合适的。当我在我发布的代码末尾添加那一行时,我从中得到的输出是
(u'abc/\u03b1\u03b2\u03b3')
。哦,你是对的。我会更新我的答案,因为我找到了正确的方法。有趣的想法。关于引号,lambda s有什么问题:'%s'%s.encode('utf-8')
?@kjo-什么都没有,只要
s
中没有单引号。请参阅我的编辑,了解如果有单引号,它会是什么样子。是的,我真正能想到的是
“'%s'%s.encode('utf-8')。替换('',r'\'))
但如果有一种好方法可以让Python自动切换到双引号,那就太好了。