4.python2与python3编码区别,以及字符串与字节的相互转换及其socket编程应用场景
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4.python2与python3编码区别,以及字符串与字节的相互转换及其socket编程应用场景相关的知识,希望对你有一定的参考价值。
知识点剖析
1.python2与python3的某些区别
其实一直想写这篇博客,实则在socket编程中,字符串,字节(byte),和bit流把我弄得晕头转向。确实这也是python3与python2的区别所在。我想在12期的时候,刚从python2转到python3的沛齐与Alex老师也是十分头疼,最近几天查看了相关资料与视频,才恍然大悟。
首先我们看一下下面的实例:
原因:在python2.7中,for循环遇到汉字,依然会按照字节进行循环,那么3个字节才能组成的汉字,单个输出只能时乱码。
解决方法就是在输出的时候,没3个字节输出一次,但是这样显得特别繁琐。
那么在python3.5中是以怎样的形式进行输出呢?
在python3中,我们对输出的元素进行了封装,统一按字符输出,"111"是3个字符组成了字符串,"aaa"是3个字母组成的字符串,
"吴文"是由两个汉字字符组成的字符串,但是对于单个字符的汉字来说,python3还是以utf-8的形式编码,在内存中,它依然占有
3个字节,只是输出的时候,将3个字节封装成一个字符统一的输出,这是python3在python2上的改进之一。
沛齐老师说下面这个题,面试可能会考到
输出名字对应的二进制形式
name = "吴文" for i in name: print(i) bytes_list = bytes(i, encoding=‘utf-8‘) print(bytes_list) for b in bytes_list: ‘‘‘对于这个for循环,b‘\\xe5\\x90\\xb4‘为一个3个字符组成的字符串 只是每个字符是由2位二进制表示的8位的二进制的字符而已 ‘‘‘ print(b, bin(b)) #默认输出为10进制,bin()的用法也是将10进制表示为2进制
结果:
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)
结果:
2.1应用场景:socket编程
图做的有点不规范了,因为脱离了主机后,它已经是bit流了,在这里只是为了展示一个汉字应该发生的变化,
这些变化出了计算机就只剩下电信号了。
以上是关于4.python2与python3编码区别,以及字符串与字节的相互转换及其socket编程应用场景的主要内容,如果未能解决你的问题,请参考以下文章