• 中文
    • English
  • 注册
  • 赞助本站

    • 支付宝
    • 微信
    • QQ

    感谢一直支持本站的所有人!

    • 查看作者
    • 第四章:字符串和编码

      一. 字符编码

      • 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
    • 281
    • 请登录之后再进行评论

      登录
    • 做任务
    • 实时动态
    • 偏好设置
    • 返回顶部
    • 单栏布局 侧栏位置: