我遇到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字符串。
答案 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
。