在Python中打印包含中文字符的列表

5 python utf-8 character-encoding codepages gbk

我的代码看起来像:

# -*- coding: utf-8 -*-

print ["asdf", "??"]
print ["??"]
print "??"
Run Code Online (Sandbox Code Playgroud)

Eclipse控制台中的输出非常奇怪:

['asdf', '\xe4\xb8\xad\xe6\x96\x87']
['\xe4\xb8\xad\xe6\x96\x87']
??
Run Code Online (Sandbox Code Playgroud)

我的第一个问题是:为什么最后一行得到正确的输出,而其他的没有?

我的第二个问题是:如何纠正错误的(使它们输出真实的字符而不是以"x"开头的代码)

感谢你们!!

aba*_*ert 6

为什么最后一行得到正确的输出,而其他人没有?

当你print foo,打印出来的是str(foo).

但是,如果foo是a list,则str(foo)使用repr(bar)每个元素bar,而不是str(bar).

str字符串的是它本身; 该repr字符串是引号内的字符串,并且逃脱.

我该如何纠正错误的

如果要打印a中str的每个元素,list则必须明确地执行此操作.例如:

print '[' + ', '.join(["asdf", "??"]) + ']'
Run Code Online (Sandbox Code Playgroud)

有一些零星的提议要改变这种行为,所以str在一个序列上调用str它的成员.PEP 3140是被拒绝的提案.2009年的这个主题解释了拒绝它的设计理由.

但主要是,要么这些不打印相同的东西:

a = 'foo, bar'
b = 'foo'
c = 'bar'
print [a]
print [b, c]
Run Code Online (Sandbox Code Playgroud)

或者,解释Ned Batchelder:repr永远是极客; str尽可能用于人类,但是用括号和逗号打印列表已经是极客.