python2打印中文_python2.7 关于打印中文的各种方法

目录

正文

在开发过程中,我们经常需要打印一些变量的值,便于调试。这个时候就会发现如果在dict list这些容器中,如果包含中文字符,不管是str类型,还是unicode类型,都打印不出来。如下:

>>> print {'name': '张三'}

{'name': '\xd5\xc5\xc8\xfd'}

>>> print {'name': u'张三'}

{'name': u'\u5f20\u4e09'}

当然,作为凡人的我是在无法脑补这些十六进制的意思,每次转移一下也很麻烦,有没有办法一劳永逸呢。google了一把,发现还是有很多姿势的。

注意:本文实验主要基于win7,Python2.7,运行环境如下

>>> import sys,locale

>>> sys.getdefaultencoding()

'ascii'

>>> locale.getdefaultlocale()

('zh_CN', 'cp936')

>>> sys.stdin.encoding

'cp936'

>>> sys.stdout.encoding

'cp936'

str类型的中文

首先让我们分析一下为什么无法包含中文的container(dict list tuple)

>>> data = {'严': 1, 2: ['如'], 3:'玉'}

>>> data

{2: ['\xc8\xe7'], 3: '\xd3\xf1', '\xd1\xcf': 1}

>>> print data

{2: ['\xc8\xe7'], 3: '\xd3\xf1', '\xd1\xcf': 1}

>>> print data[3]

上面data在key value中包含中文,而且也有嵌套的list,后文都使用这个data

可以看到不管是直接输出data(调用dict.__repr__),还是print data(调用dict.__str__),都无法输出中文,而是像str.__repr__的结果。即调用容器的__str__时,事实上调用的是容器元素的__repr__方法,这个很好验证:

>>> class OBJ(object):

... def __str__(self):

... return 'OBJ str'

... def __repr__(self):

... return 'OBJ repr'

...

>>> lst = [OBJ()]

>>> print lst

[OBJ repr]

>>>

OBJ这个自定义的类,__str__ __r

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值