python bytes and string 编码

整理,转载:http://ooaer.iteye.com/blog/1757532 , http://blog.csdn.net/zqt520/article/details/8765331

在Python中,bytes和string是不同的东西。

由一系列不可改变的Unicode字符组成的叫string。

而一系列不可改变的介于0-255之间的数字被称为bytes对象。 


str 与 bytes型相互转换

转换的方法如下:

[python]  view plain  copy
  1. bytes object   b = b"example"     
  2. str object   s = "example"      
  3. #str to bytes    
  4.  bytes(s, encoding = "utf8")     
  5. #bytes to str    
  6.  str(b, decoding = "utf-8")    
  7. #an alternative method     
  8. #str to bytes    
  9.  str.encode(s)     
  10. #bytes to str     
  11. bytes.decode(b)  


来看示例: 

>>> by = b'abcd\x65' #使用b''的格式定义bytes对象。每一个byte可以是一个ASCII字符或者十六进制数从\x00到\xff。

 >>> by 

b'abcde' 

>>> type(by)  

>>> len(by)    #和list和string一样,可以使用内置的len()函数计算bytes对象的长度。 

>>> by += b'\xff'  #和list和string一样,可以使用+操作符连接两个bytes对象。 

>>> by 

b'abcde\xff' 

>>> len(by) 6 

>>> by[0]    #可以使用索引来访问bytes对象中的某一个byte 97 

>>> by[4] 

101 

>>> by[0] = 111   #bytes对象是不可改变的,不能对其赋值。 

Traceback (most recent call last):   File "", line 1, in  TypeError: 'bytes' object does not support item assignment 


虽然我们不能对bytes对象直接赋值,但是我们可以将bytes转换为一个bytearray对象,bytearray对象是可以被修改的。 

>>> barr = bytearray(by)

 >>> barr 

bytearray(b'abcde\xff') 

>>> barr[0] = 120 

>>> barr

 bytearray(b'xbcde\xff') 


bytes对象和string是不可以混在一起的。 

>>> by 

b’abcde\xff’ 


>>> s = “abcdefg” 
>>> by + s 

Traceback (most recent call last): 
File ““, line 1, in 
TypeError: can’t concat bytes to str 
但是,bytes和string并不是毫无关系的,bytes对象有一个decode()方法,向该方法传递一个字符编码参数,该方法会返回使用该种编码解码后的字符串。同样的,string有一个encode()方法,完成反向的工作。 

>>> string = "深入 Python" 

>>> len(string) 

>>> by = string.encode('utf-8')   #将字符串编码为UTF8 

>>> len(by) 

13 

>>> by

 b'\xe6\xb7\xb1\xe5\x85\xa5 Python' 

>>> by = string.encode('gb18030')  #将字符串编码为GB18030

 >>> len(by) 

11 

>>> by 

b'\xc9\xee\xc8\xeb Python'

 >>> by.decode('gb18030')    #将bytes对象解码 '深入 Python'


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值