关于python的str和unicode以及编码的问题

事情是这样的,自己想用python将腾讯首页上的中文全部取出,遇到了一些困难,又扯到了python的编码问题。所以,研究了一下。

Python内部有一个unicode对象,所以python的内置编码为unicode编码。如果你的源代码文件为utf-8编码,那么请你在你的源代码第一行加上 -*- coding:utf-8 -*- 这一句,以告诉python解释器,你的源代码是用utf-8编码的。你的字符串也就是str,是utf-8编码的。那么你在处理的时候,就要用decode(‘utf-8’),来创建一个unicode对象。不多说,用例子来过一遍你就懂了。

1 x = ‘中’ #x为str类型, 是utf-8 编码的
2 
3 y = x.decode(‘utf-8’) #y为unicode类型,是unicode编码的

 

unicode和str在python中是两个不同的数据类型,看例子:

1 x = '中国'
2 
3 print repr(x[0])
4 
5 y = x.decode('utf-8')
6 
7 print repr(y[1])

 

结果为:

'\xe4'

u'\u56fd'

也就是有网友所说的str相当于java中的byte[],而unicode就如char[]。有这点味道在里面。

还强调一下,str(一个unicode对象)得到的结果是:unicode 到 utf-8的转换。

1 x = '中国'
2 
3 print repr(x[0])
4 
5 y = x.decode('utf-8')
6 
7 print repr(y[1])

 

结果为:

'\xe4'

'\xe5\x9b\xbd'

 

 

附:关于提取出中文的问题:请参照stackoverflow上的一个问答

http://stackoverflow.com/questions/2718196/find-all-chinese-text-in-a-string-using-python-and-regex

再附一个讲这类问题的博客:

http://cache.baidu.com/c?m=9d78d513d9841df409b0c2291a17a771695097153ac0a16168a0925f93151a070771e3ca30531513a7cf6b1702b83d5efeb7762c385966f1d9df8939c0a6d76d6a9f27432140d61f4f8658b8cb31749c7f8d2ca3ce44b3fced61d3ff88889b034eca5106789df28c470017d76cf51232e1a0985f15284afcb26e&p=882a9644d29915b313acc7710e118227&newp=8b2a9642c7934eac59e9d63d5b5480395c5bc4387ebad1147bc5&user=baidu&fm=sc&query=unicode%B6%D4%CF%F3+str+%C7%F8%B1%F0&qid=fcc0f0d204dd6f02&p1=2

posted on 2012-10-20 19:11  brainworm  阅读(841)  评论(0)    收藏  举报

导航