周烨

周烨的博客

他的个人主页  他的博客

python中文

周烨  2009年11月19日 星期四 09:34 | 1491次浏览 | 5条评论

为什么我在python2.4中,list类型的变量,list里有中文。如:

list=['你好','中文']

print list

这时显示的就不是中文的,而是这几个字的gb2312码。

但是print list[0]

这时显示的就是 你好

有点奇怪

评论

我的评论:

发表评论

请 登录 后发表评论。还没有在Zeuux哲思注册吗?现在 注册 !
刘群

回复 刘群  2009年11月21日 星期六 23:15

试试在Python脚本文件开头指定字符编码?我用的是utf-8,在Linux下兼容性比较好。Windows下就不清楚了,应该是GB18030或GB2312吧

#!/usr/bin/python
# -*- coding: utf-8 -*-

1条回复

邹业盛

回复 邹业盛  2009年11月19日 星期四 14:59


>>> class A:
... def __repr__(self):
... return '我们是害虫'
...
>>> a = A()
>>> str(a)
'\xe6\x88\x91\xe4\xbb\xac\xe6\x98\xaf\xe5\xae\xb3\xe8\x99\xab'
>>> print a
我们是害虫
>>> a.__repr__()
'\xe6\x88\x91\xe4\xbb\xac\xe6\x98\xaf\xe5\xae\xb3\xe8\x99\xab'
>>> a.__repr__().__repr__()
"'\\xe6\\x88\\x91\\xe4\\xbb\\xac\\xe6\\x98\\xaf\\xe5\\xae\\xb3\\xe8\\x99\\xab'
>>> print a.__repr__()
我们是害虫
>>> print a.__repr__().__repr__()
'\xe6\x88\x91\xe4\xbb\xac\xe6\x98\xaf\xe5\xae\xb3\xe8\x99\xab'

0条回复

邹业盛

回复 邹业盛  2009年11月19日 星期四 14:59

你这样理解吧,一个 list 与一个 string 它们“可视化”的形式不一样。这和:

>>> class A:
... pass
...
>>> a = A()
>>> print a
<__main__.A instance at 0xb7e3d9ac>

本质上没有什么不同。
实上:

print a --> a.__repr__() --> str(a)

类似于(只是类似,str(x)不是单纯地调用了x.__repr__()):
len(a) == a.__len__()

这种关系。

list 的 __repr__() 和 string 的 __repr__() 是不同的。
准确地说: '\xe9\x82' 与 \xe9\x82 是不同的。
你看不到 \xe9\x82 ,因为它已经被转成相应的字符了

进一步:

print a == sys.stdout.write(str(a))

思考下两个例子:

>>> import sys
>>> sys.stdout=open('/home/zys/aa.txt','a')
>>> a=['中']
>>> print a
>>> sys.stdout.close()
(查看 aa.txt 文件)

------------------

...

1条回复

暂时没有评论

Zeuux © 2024

京ICP备05028076号