一. 字符编码
-
ASCII编码有127个字符
-
ASCII码只能表示英文,其他国家都有自己的编码标准,为了统一,Unicode诞生,Unicode把所有语言都统一到一套编码里
-
ASCII编码是1个字节,而Unicode编码通常是2个字节,为了节约空间,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码
-
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。
-
在最新的Python 3版本中,字符串是以Unicode编码
-
1个中文字符经过UTF-8编码后通常会占用3个字节,而1个英文字符只占用1个字节
二. 字符串
'ABC'和b'ABC',前者是字符串类型(str)的数据,以字符为单位
后者是字节串(bytes)类型的数据,以字节为单位
虽然后者内容显示得和前者一样,但bytes的每个字符都只占用一个字节,且以二进制类型存储数据,而以Unicode表示的str通过encode()方法可以编码为指定的bytes,为了避免乱码问题,需使用UTF-8编码对str和bytes进行转换
三. 常见函数或方法
1. ord()函数:获取字符的整数
2. chr()函数:把编码转换为对应的字符
print(ord("甲")) #30002 print(chr(30002)) #甲
3. len()函数:计算str包含多少个字符
-
len()函数计算的是str的字符数,如果换成bytes,len()函数就计算字节数
4. 带b前缀的单引号或双引号:把str变为以字节为单位的bytes
5. encode()方法:str转bytes,这个过程称为“编码”,如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes
-
纯英文的str可以用ASCII编码为bytes,内容是一样的,含有中文的str可以用UTF-8编码为bytes,在bytes中,无法显示为ASCII字符的字节,用\x##显示。
6. decode()方法:bytes转str,这个过程称为“解码”,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes,就需要把bytes变为str
-
如果bytes中包含无法解码的字节,decode()方法会报错,可以传入errors='ignore'忽略错误的字节(只能忽略小错误)
print(len("甲")) #结果=1,此时len计算的是字符数,为1 print(len("甲".encode('utf-8'))) #将str转换为bytes,后,len计算的是字节数,为3 print(len("A")) #1 print(len("A".encode('utf-8'))) #1 print("甲".encode('utf-8')) #b'\xe7\x94\xb2' print(b'\xe7\x94\xb2'.decode('utf-8')) #甲 print( b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore')) #中
7. 格式化
%运算符用来格式化字符串,%s表示用字符串替换,%d表示用整数替换,%f表示用浮点数替换,%%可以转义一个%
name = "ZhangJia" age = 24 weight = 60.8 print("我叫%s,今年%d岁了,我的体重是%f。"%(name,age,weight))#输出:我叫ZhangJia,今年24岁了,我的体重是60.800000。 print("我叫%s,今年%d岁了,我的体重是%.3f。"%(name,age,weight))#输出:我叫ZhangJia,今年24岁了,我的体重是60.800。
8. format()方法:格式化字符串
name = "ZhangJia" age = 24 weight = 60.8 print("我叫{0},今年{1}岁了,我的体重是{2}。".format(name,age,weight)) #输出:我叫ZhangJia,今年24岁了,我的体重是60.8。
9. f-string
name = "ZhangJia" age = 24 weight = 60.8 print(f"我叫{name},今年{age}岁了,我的体重是{weight}。")#输出:我叫ZhangJia,今年24岁了,我的体重是60.8。 weight = 60.888 print(f"我叫{name},今年{age}岁了,我的体重是{weight:.2f}。")#我叫ZhangJia,今年24岁了,我的体重是60.89。(四舍五入)
请登录之后再进行评论