Python unicode列表怪异

时间:2015-01-16 14:47:35

标签: python list python-2.7 unicode utf-8

我遇到Python unicode字符串问题。当我打印一个unicode字符串时,Python正确地显示了unicode字符,但是当这个字符串在列表中时,Python正在将这些相同的字符转换为一个奇怪的代码。

以下是示例代码:

# -*- coding: utf-8 -*-
s = 'São Paulo'
print s
>>São Paulo

OK!

# -*- coding: utf-8 -*-
l = ['São Paulo']
print l
>>['S\xc3\xa3o Paulo']

不行......没有显示格式正确的unicode字符串。

2 个答案:

答案 0 :(得分:1)

容器上的

__str__print隐含使用的内容)始终显示__repr__ - 如果你停下来思考它,那么在极端情况下避免模棱两可是非常不可避免的。

要解决这个问题,我建议您定义自己的类似打印的功能,而不是弄乱容器或项目类。这将不可避免地产生潜在的模糊性,但也许你可以忍受它。

E.g:

def showstr(s):
    if "'" in s:
        delim = '"'
    else:
        delim = "'"
    return delim + s + delim

def showlist(l):
    result = []
    for x in l: 
        result.append(showstr(x))
    return '[' + ', '.join(result) + ']'

这有几个潜在的歧义(并不处理包含字符串和其他类型的项目的列表,也不涉及包含两种分隔符的字符串)但是打印showlist(l)而不是直接l可以是你正在寻找的“更漂亮的”输出的开始。

答案 1 :(得分:0)

print在打印的内容上调用str,但str(<iterable>)会在容器的元素上调用repr