1.bytes的特点
bytes由一系列字节组成,字节的取值范围为0~255,至于具体的内容(例如:视频、音频、图片等)、数据的类型、作用,bytes并不进行约束。采用适合的编码方式(例如:utf-8),可以将字符串转换为字节序列,反之,也可以将字节序列转换为字符串。
2.字节序列与字符串的区别
①字节序列是由若干个字节组成,以字节为单位;字符串由若干个字符组成,以字符为单位
②字节序列和字符串除了操作的单位不同,它们支持的所有方法都相同
③字节序列和字符串都是不可变类型,不可删除和修改(修改其中某个字符或者字节)
3.通过字符串创建bytes对象(将字符串转换为bytes对象),方法如下:
①直接在字符串前添加b前缀,即可将字符串转换为bytes,例如:
name=b"Tom" # 将字符串转换为字节序列
print(name,type(name))
上述输出结果为:
b'Tom'
注:此种方式要求字符串只能是由ASCILL字符组成的字符串
②bytes是一个类,可以通过调用其构造方法bytes(),将字符串按照指定的编码方式转换为字节序列,如果未指定编码方式,则会按照python默认的编码方式(utf-8)进行转换 ,例如:
name = bytes("孙悟空", "utf-8") # 其中第二个参数可省略,省略时默认采用编码方式utf-8
print(name,type(name))
上述输出结果为:
b'\xe5\xad\x99\xe6\x82\x9f\xe7\xa9\xba'
③字符串本身有一个encode方法,该方法专门用来将字符串按照指定的编码方式转换为字节序列(即编码),语法为:str.encode(encoding="",errors=""),其中参数encoding为编码时采用的字符编码方式,errors为错误处理方式,均可省略。如果未指定encoding,则会按照默认的编码方式utf-8进行转换 ,如果未指定错误处理方式,则默认采用strict(即遇到非法字符就抛出异常),例如:
name="花果山水帘洞"
name1="\xa3\xa0aa"
print(name1.encode(encoding="gb2312",errors="ignore")) # 完整写法,指定编码方式为gb2312,错误处理方式为:忽略非法字符
print(name.encode("gbk")) # 指定编码方式gbk,默认错误处理方式strict
print(name1.encode(errors="replace")) # 指定错误处理方式为用"?"替代非法字符,采用默认编码方式utf-8
print(name1.encode(encoding="gbk",errors="xmlcharrefreplace")) # 指定编码方式为gbk,指定错误处理方式使用xml的字符引用,如果无法使用UTF,并且不想数据丢失,可以使用该种方式
print(name,name1)
上述输出结果为:
b'aa'
b'\xbb\xa8\xb9\xfb\xc9\xbd\xcb\xae\xc1\xb1\xb6\xb4'
b'\xc2\xa3\xc2\xa0aa'
b'lb aa'
花果山水帘洞 lb aa
从上述结果可以看出,encode会对原字符串进行编码,但是不会修改字符串本身。
你可以幻想天上掉馅饼,但也不要忘了让自己有接住馅饼的能力。