在 python 中为什么包含在列表或字典中的汉字不能正常显示?

In[9]: print "汉字"
汉字
In[10]: print ["汉字"]
['\xe6\xb1\x89\xe5\xad\x97']

为什么被包含在列表里时就显示成了 \xe6\xb1\x89\xe5\xad\x97

写成

In[13]: print [u"汉字"]
[u'\u6c49\u5b57']

还是有这个问题

阅读 8.1k
3 个回答

请用u"汉字"

怎么纠正的话, 楼上的方法是可以得,至于为什么这么设计,转一段话来说吧:

print一个对象,是输出其“为了给人(最终用户)阅读”而设计的输出形式,那么字符串中的转义字符需要转出来,而且 也不要带标识字符串边界的引号。
而在命令行下对对象求值,其输出是为了让程序员探求其内在特征,所以输出结果是对对象的描述。现在问题来了,一个list对象,本身就是个数据结构,如果要把它显示给最终用户看,而不是用于给程序员调试时,应该如何 “润色”输出格式呢?这显然应该交给程序员去根据应用的需要来做“润色”而不是显示一个用来表示list的方括号,里面却是 给最终用户看的“润色”过的结果。这种蹩脚输出,对最终用户 很不知所云,对程序员调试程序又没啥意义。

简单来说的话,列表作为一个数据结构,一般情况是不会直接给最终用户看俩括号,中间是一点内容的形式,而是要经过润色,就比如楼上的解法显示中文就是一种润色,还可以迭代输出也可以输出中文。而对程序员来说, 输出编码是更好的显示内在特征。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题