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

时间:2013-07-10 00:38:20

标签: python utf-8 character-encoding codepages gbk

我的代码如下:

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

print ["asdf", "中文"]
print ["中文"]
print "中文"

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

['asdf', '\xe4\xb8\xad\xe6\x96\x87']
['\xe4\xb8\xad\xe6\x96\x87']
中文

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

我的第二个问题是:如何更正错误(使其输出真实字符而不是以“x”开头的代码) < / p>

谢谢你们!!

2 个答案:

答案 0 :(得分:6)

  

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

当您print foo时,打印出的内容为str(foo)

但是,如果foolist,则str(foo)会为每个元素repr(bar)使用bar,而不是str(bar)

字符串的str是字符串本身;字符串的repr是引号内的字符串,并已转义。

  

如何纠正错误的

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

print '[' + ', '.join(["asdf", "中文"]) + ']'

有一些零星的提议要更改此行为,因此序列上的str会在其成员上调用strPEP 3140是被拒绝的提案。 This thread from 2009解释了拒绝它背后的设计理由。

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

a = 'foo, bar'
b = 'foo'
c = 'bar'
print [a]
print [b, c]

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

答案 1 :(得分:1)

前两个使用__repr__字符串,最后一个使用__str__方法

您可以使用

print ", ".join(["asdf", "中文"])