首页 > 编程语言 > 详细

Python encode和decode

时间:2016-08-02 00:49:08      阅读:352      评论:0      收藏:0      [点我收藏+]

最近对于Python2和Python3的编码和解码比较困惑,在知乎上面咨询了依云大神后对Python的编码和解码逐渐清晰起来,

在此把个人理解结合大神的指点分享一下,如下内容仅代表个人观点,不排除有错误!

首先需要明白encode == 编码,decode == 解码,encode就是把逻辑上的字符变成二进制数据,以便存储和传输.

(至于编码前和解码后的字符是怎么存储的,是Python的内部实现,只有 Python 自己需要操心,你不用管;

就像你不用管整数在 Python 内存里长什么样一样,但是你把整数存起来或者传输到网络上时;

你就得考虑,是转成十进制字符串表示呢,还是转成32位无符号小端序表示呢,还是64位有符号网络序表示呢……)

 

## Python 2.x非常特殊和混乱,默认的字符串(str)对象是ascii编码,要支持非英文字符串时需要指定为unicode编码

python2.x中字符串有str和unicode两种类型:

str1 = ‘my name is Ray‘ # ascii字符串

ustr1 = u‘我的名字是Ray‘ # unicode字符串

Python2中的解码与编码: 非unicode编码str在解码(decode)为unicode后才能encode为其它编码.

str1.decode(‘ascii‘) # ascii ==> unicode

str1.decode(‘ascii‘).encode(‘utf-8‘) # unicode ==> utf-8

关于ascii\unicode\utf-8编码的理解:

1.ascii和unicode编码是两个不同的编码标准,而utf-8是一种针对Unicode的可变长度字符编码,又称万国码.

2.ascii编码是1个字节(2^8),而unicode编码通常是2个字节(2^16),一字节是8bit,但是utf-8编码一般是3个字节.

3.ascii编码只支持英文字母和数字及一些符号,unicode编码可以支持全世界的字符,中文和拉丁文等.

4.编程中广泛使用的utf-8可变长字符编码,对于纯英文字符在utf-8编码中还是和ascii编码一样只占用1字节,非英文字符才占用3个字节.

______________________________________________________________

| 字符  | ASCII          | Unicode                          | UTF-8                                        |

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

|   A    | 01000001  | 00000000 01000001   | 01000001                                   |

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

|   中   | X                | 01001110 00101101   | 11100100 10111000 10101101 |

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

5.内存读写信息是以byte为单位.

__________________________________________

|                                     string                                   |

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

|           char         |           char        |          char          |

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

|   byte   |   byte   |   byte   |   byte   |   byte   |   byte   |

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

 

## Python 3.x默认的字符串(str)对象是unicode编码,可以使用sys.getdefaultencoding()查看.

Python3中关于str和byte的理解:

如上面所说encode == 编码,decode == 解码,encode就是把逻辑上的字符变成二进制数据,以便存储和传输.

Python3中的str是字符串数据对象不能decode,byte是二进制数据对象同理也不能encode;

str调用encode方法产生一个编码后的byte类型(二进制)的字符串,而byte类型的字符串支持解码(decode)操作转换回str类型.

所以在io模块里面有StringIO和BytesIO之分,内存读写二进制数据使用BytesIO,内存读写字符串时使用StringIO.

# str object
s = "example"

# bytes object
b = b"example"

# str to bytes
bytes(s, encoding = "utf8")

# bytes to str
str(b, encoding = "utf-8")

# an alternative method
# str to bytes
str.encode(s)

# bytes to str
bytes.decode(b)

Python encode和decode

原文:http://www.cnblogs.com/raykuan/p/5727687.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!