柠檬班 2020-06-11
python3 中引入两个新类型
str 是字符数据,bytes 和 bytearray 是字节数据,它们都是序列, 可以进行迭代遍历.
它们都能使用 str类型的通用函数,比如 find() replace() islower() 等,但不能使用 str的格式化操作
不可变字节序列
#创建一个 bytes 类型的数据 a=b"mingyue" #加上b前缀 a1=bytes() #强制转换为bytes 类型 a3=bytes(10) #创建10个长度的 bytes 数据 x="123" a2=x.encode() #使用encode 将 str类型解码为 bytes类型 print(type(a2))
编码与解码方法
str.encode(encoding=‘UTF-8‘,errors=‘strict‘)
字符串.encode(编码格式)
可以将字符串 编码成字节型的数据
str.encode(encoding=‘UTF-8‘,errors=‘strict‘)
字符串.decode(编码格式)
可将字节型的数据转换成 指定格式的 字符串 默认使用unicode
字节数组
可变
class bytearray([source[, encoding[, errors]]])
1.ascii 码
美国标准信息交换码 是最通用的信息交换标准
ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符
后来有了 扩展 ascii 码表
每个汉字和符号以两个字节来表示.第一个字节称为"高位字节" 第二个字节称为"低位字节" 高位字节 使用了0xa1-0xf7 ,低位字节 使用了 0xa1-0xfe
那就意味着 一个中文字符 他的最高位 只能 大于 a1 拆成 二进制 即为 10100001 而且它是占两字节的 而普通的 ascii 码 a b c d 只占一个字节
这种编码方式 是为了让计算机显示 中文 而发明的 现在普遍使用 gbk(gb2312的升级版)
兼容更多的语言 无论什么编码,内部都包含ascii编码(也有例外,比如utf-16),它只需单个字节。也就是说,ascii编码是任何其它编码表的子集。但有些编码表强制规定每个字符占多少个字节(比如unicode固定为2个字节),有些编码表动态决定每个字符占多少个字节(比如utf-8是变长的,可能占用1-4个字节空间,存储字母为1个字节,存储中文字符为3个字节)。
要构建Unicode类型,只需加上u或U前缀。
现在主流的编程语言都支持 unicode 编码
大端存储
小端存储
举例:
0x12345678
内存中的格式:
大端: 12 34 56 78
小端: 78 56 34 12
intel x86 . windows/linux 使用小端
网络传输. Mac OS . java虚拟机 使用大端模式