码迷,mamicode.com
首页 > 编程语言 > 详细

python2.7.x的字符串编码到底什么鬼?(中文和英文的处理)

时间:2016-05-05 07:04:25      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:

一直以来我其实一直对python的编码弄得非常晕,能正常编码,也能处理一些情况。但是始终不明白有些问题究竟为何出,原因是什么,为什么要这样用。

今天晚上正好好好研究了一番解答了自己心中的困惑。

 

Q:python2.7.x里面的中文表示到底是什么鬼?

A:直接来看看

In [23]: x = 好不好喝都要喝

In [24]: x
Out[24]: \xe5\xa5\xbd\xe4\xb8\x8d\xe5\xa5\xbd\xe5\x96\x9d\xe9\x83\xbd\xe8\xa6\x81\xe5\x96\x9d

这个x打印值相信熟悉编码的盆友都知道,这是utf-8编码。也就是说python2.7.x 在默认情况下将中文默认转到了utf-8编码。

这里type(x)得到结果是str

 

Q:python2.7.x里的unicode究竟什么鬼?

A:还是通过例子来看看

In [16]: x = u好不好喝就很好喝

In [17]: type(x)
Out[17]: unicode

在2.7.x在中,u写在字符串前面将会将一个字符串转成unicode对象。

 

Q:python2.7.x中unicode可以和str相加吗?

A:还是来看例子

In [62]: z = 好不好喝

In [63]: x = u好不好喝都要喝

In [64]: z+x
---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-64-f964ff206363> in <module>()
----> 1 z+x

UnicodeDecodeError: ascii codec cant decode byte 0xe5 in position 0: ordinal not in range(128)

熟悉的报错,可见在python2.7.x中,unicode中文和utf8中文是不能相加的因为是不同类型。

 

Q:那么英文字符串可以相加吗?

A:可以。具体就不掩饰了大家可以自己试试。而且最终得到的结果会被转成全unicode

 

写了四组QA下面要提到两个库,也算是坑吧。simplejson和json是在python中广泛使用的json encode decode库。

这两个库在对无论utf8还是unicode对象进行中文编码的时候,都会将内容转成unicode再编码。最后你拿到结果decode之后就变成了unicode对象,想要再拿到utf8对象,就需要再encode一次才可以了。

一不注意就踩坑。

 

python2.7.x的字符串编码到底什么鬼?(中文和英文的处理)

标签:

原文地址:http://www.cnblogs.com/piperck/p/5460416.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!