python编码解码的过程_python中的编码与解码

python2和python3中重大的不同是string的类型不同,在python2中,string其实是对应于字节流,而在python3中则直接对应于unicode字符集,如下例子所示:

在python2中string相当于字节流

#python2

>>> astr = "你好"

>>> astr

b"\xe4\xbd\xa0\xe5\xa5\xbd"

>>> "你好" is b"\xe4\xbd\xa0\xe5\xa5\xbd"

True

>>> u'\u4f60\u597d' is b"\xe4\xbd\xa0\xe5\xa5\xbd"

False

这里的 b"\xe4\xbd\xa0\xe5\xa5\xbd"是"你好"的16进制的字节表示方式,而u'\u4f60\u597d'为"你好"的unicode编号,也是以16进制的方式展示的。

而在python3中string相当于unicode字符集

#python3

>>> astr = "你好"

>>> astr

"你好"

>>> u'\u4f60\u597d'

'你好'

>>> u'\u4f60\u597d' is '你好'

True

由此引出的编码与解码的问题我们可以使用如下的图来帮助理解

a78d46416a67

编码与解码

由上图可以看到,我们将Unicode字符集与字节流进行转换时会产生编码与解码的问题,编码规则就是我们常见的utf-8,ascii,gbk等这些。由字节流转换为Unicode字符集的过程就叫解码,而由Unicode字符集转换字节流的过程则叫编码。

接下来看下编码与解码的示例

#python2

>>> astr = "你好"

>>> astr.decode("utf-8") #从字节流依据utf-8编码规则转换为unicode字符集

u'\u4f60\u597d'

>>> unicode_str = u'你好'

>>> unicode_str

u'\u4f60\u597d'

>>> unicode_str.encode("utf-8") #由 unicode字符集转换为字节流

b'\xe4\xbd\xa0\xe5\xa5\xbd'

#python3

>>> astr

'你好'

>>> astr.encode("utf-8") #由 unicode字符集编码成字节流

b'\xe4\xbd\xa0\xe5\xa5\xbd'

>>> b'\xe4\xbd\xa0\xe5\xa5\xbd'.decode("utf-8")

'你好'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值