python2与python3编码_4.python2与python3编码区别,以及字符串与字节的相互转换及其socket编程应用场景...

知识点剖析

1.python2与python3的某些区别

其实一直想写这篇博客,实则在socket编程中,字符串,字节(byte),和bit流把我弄得晕头转向。确实这也是python3与python2的区别所在。我想在12期的时候,刚从python2转到python3的沛齐与Alex老师也是十分头疼,最近几天查看了相关资料与视频,才恍然大悟。

首先我们看一下下面的实例:

12a891be4c69ffa574523ca81db15f78.png

343bdefa6ad42855577ef7d80bfcac03.png

原因:在python2.7中,for循环遇到汉字,依然会按照字节进行循环,那么3个字节才能组成的汉字,单个输出只能时乱码。

解决方法就是在输出的时候,没3个字节输出一次,但是这样显得特别繁琐。

那么在python3.5中是以怎样的形式进行输出呢?

40164e54babd6f74fa9f622c1a20e4ae.png 

671323cb94fd9d238f13d3b639365263.png

在python3中,我们对输出的元素进行了封装,统一按字符输出,"111"是3个字符组成了字符串,"aaa"是3个字母组成的字符串,

"吴文"是由两个汉字字符组成的字符串,但是对于单个字符的汉字来说,python3还是以utf-8的形式编码,在内存中,它依然占有

3个字节,只是输出的时候,将3个字节封装成一个字符统一的输出,这是python3在python2上的改进之一。

沛齐老师说下面这个题,面试可能会考到

输出名字对应的二进制形式

name = "吴文"

for i inname:print(i)

bytes_list= bytes(i, encoding=‘utf-8‘)print(bytes_list)for b inbytes_list:‘‘‘对于这个for循环,b‘\xe5\x90\xb4‘为一个3个字符组成的字符串

只是每个字符是由2位二进制表示的8位的二进制的字符而已‘‘‘

print(b, bin(b)) #默认输出为10进制,bin()的用法也是将10进制表示为2进制

结果:

8ac2fa991b333df428cbacda0e23423e.png

2.str类型与bytes类型的互相转换以及其应用场景。

tips:在python2中,bytes没有意义,因为多数场景,它本身是按字节来执行的

#将字符串转换成字节

a = "吴文"b= bytes(a, encoding=‘utf-8‘)print(b)

b1= bytes(a, encoding=‘gbk‘)print(b1)#将字节转换成字符串

a1 = str(b, encoding=‘utf-8‘)print(a1)

a2= str(b1, encoding=‘gbk‘)print(a2)

结果:

28fff23bec94306ea19647a4f5b22ccc.png

2.1应用场景:socket编程

73d8f2f1b15d01ae7f8991513efbd6ca.png

图做的有点不规范了,因为脱离了主机后,它已经是bit流了,在这里只是为了展示一个汉字应该发生的变化,

这些变化出了计算机就只剩下电信号了。

原文:http://www.cnblogs.com/wuwen19940508/p/6760018.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值