1,在python2.x 中是不区分bytes和str类型的,在python3中bytes和str中是区分开的,str的所有操作bytes都支持python2 中 >>> s = "abcdefg" >>> b = s.encode() #或者使用下面的方式>>> b = b"abcdefg">>> type(b)<type 'str'>python3中 #str和bytes是严格区分的>>> s = "abcdefg">>> type(s)<class 'str'>>>> b = b"abcdefg">>> type(b)<class 'bytes'>str是文本系列,bytes是字节系列文本是有编码的(UTF-8,GBK,GB2312等)字节没有编码文本的编码指的是字符如何使用字节来表示组织方式,linux下默认都使用UTF-82,bytes与str之间的转换-------编码bytes由str通过encode方法转化得到的,str也可以通过bytes 通过decode方法转化得到通过b前缀可以定义bytesGBK 是双字节,UTF-8 灵活编码,1字节,2字节,3字节,4字节都有,最大支持6字节长度,中文大多数是3字节>>> S = "我是中国人">>> S'我是中国人'>>> b = S.encode() #进行编码为bytes>>> bb'\xe6\x88\x91\xe6\x98\xaf\xe4\xb8\xad\xe5\x9b\xbd\xe4\xba\xba'>>> b.decode() #进行解码为字符串'我是中国人'>>> str被编码成什么格式的,就需要使用什么格式的编码进行解码>>> S = "我是中国人">>> S'我是中国人'>>> b = S.encode('GBK')>>> bb'\xce\xd2\xca\xc7\xd6\xd0\xb9\xfa\xc8\xcb'>>> b.decode('GBK')'我是中国人'可以使用bin( )将一个10进制整数或者16进制数转化为2进制>>> bin(10)'0b1010'>>> >>> bin(0xce)'0b11001110'3,bytes的操作bytes具有string类型的所有操作,bytes可以通过str encode转化,也可以通过前缀b定义>>> b = b'abc'>>> bb'abc'>>> b.decode()'abc'>>> b'abc'.find(b'c')2>>> len(('我是中国人').encode()) #求bytes的长度15>>> bb'abc'>>> b.hex() #转化为16进制'616263'>>> bin(616263) #转化为2进制'0b10010110011101000111'除了encode外,str操作都有对应的bytes版本,但是传入的参数必须是bytes bytearray类型bytearray是可变的,bytes和str是不可变的,主要用于图片处理相对bytes来说,多了insert,append,extend,pop,remove,clear,reverse等操作,并且支持索引操作>>> S1 = "人生苦短,我学python!">>> S1'人生苦短,我学python!'>>> b1 = bytearray(S1.encode())>>> b1.decode()'人生苦短,我学python!'>>> b1bytearray(b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe5\xad\xa6python\xef\xbc\x81')>>> b1[:6] = bytearray('生命'.encode())>>> S1'人生苦短,我学python!'>>> b1bytearray(b'\xe7\x94\x9f\xe5\x91\xbd\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe5\xad\xa6python\xef\xbc\x81')>>> b1.decode()'生命苦短,我学python!'>>>
原文:https://blog.csdn.net/u010694764/article/details/53811035