如何使用包含值的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/u03b1u03b2u03b3',)
abc/αβγ
(u'abc/u03b1u03b2u03b3',)
abc/αβγ

有什么方法可以让Python打印吗

('abc/αβγ',)

是否需要我自己构建元组的字符串表示?(我的意思是将"(""'"、编码值、"'"","")"串在一起?

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

谢谢!

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

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

我不这么认为-元组的__repr__()是内置的,AFAIK只会为每个元组项调用__repr__。在使用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的子类,它的__repr__()更符合您的喜好。

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

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

但是如果字符串中只有一个引号:

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

最新更新