• 中文
    • English
  • 注册
  • 查看作者
  • 第四章:字符串和编码

    一. 字符编码

    • 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。(四舍五入)

    参考资料

    [1] 廖雪峰-Python教程

    [2] C语言中文网-Python字符串常用方法

  • 0
  • 0
  • 0
  • 1k
  • 请登录之后再进行评论

    登录
    单栏布局 侧栏位置: