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

时间:2012-01-17 21:30:43

标签: 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/αβγ',)
那个

要求我自己构建元组的字符串表示吗? (我的意思是将"(""'",编码值,"'"","")"串联起来?

BTW,我正在使用Python 2.7.1。

谢谢!

3 个答案:

答案 0 :(得分:3)

您可以使用str解码元组的'raw_unicode_escape'表示。

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

答案 1 :(得分:1)

我不这么认为 - 元组的__repr__()是内置的,AFAIK只会为每个元组项调用__repr__。在unicode字符的情况下,您将获得转义序列。

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

答案 2 :(得分:1)

以下应该是一个好的开始:

>>> x = (u'abc/αβγ',)
>>> S = type('S', (unicode,), {'__repr__': lambda s: s.encode('utf-8')})
>>> tuple(map(S, x))
(abc/αβγ,)

我们的想法是创建一个unicode的子类,其中__repr__()更符合您的喜好。

仍然试图弄清楚如何最好地在引号中包含结果,这适用于您的示例:

>>> S = type('S', (unicode,), {'__repr__': lambda s: "'%s'" % s.encode('utf-8')})
>>> tuple(map(S, x))
('abc/αβγ',)

...但如果字符串中有一个引号,那么它会显得很奇怪:

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