【Python】字符串和编码详解(编码、解码、格式化字符串)

文章目录

  • 字符串和编码
  • 1.编码
  • 2.解码
  • 3.字符串长度
  • 4.格式化字符串
  • (1)用 % 实现
  • (2)用 format() 实现
  • (3)用 f-string实现
  • 5.eg
  • 字符串和编码

    在 Python 中,字符串是 Unicode 字符序列。Python 3 中的字符串默认使用 Unicode 编码(UTF-8),基本可以标识所有的字符串
    为避免乱码,用 utf-8 对 str 和 bytes 进行转换;常在文件开头加以下两行:

    #!/usr/bin/env python3     #告诉Linux/OS系统,这是一个python可执行程序
    # -*- coding: utf-8 -*-    #告诉python解释器,按照utf-8编码读取源代码
    

    1.编码

    UTF-8:一种变长的 Unicode 编码,支持所有语言字符
    ASCII:仅支持英文字符和部分控制字符
    GBK:主要用于中文字符编码

  • ord()函数获取字符的整数表示
  • print(ord('A'))
    print(ord('中'))
    

  • chr()函数把编码转换为对应的字符
  • print(chr(66))
    print(chr(25991))
    

  • 如果知道了字符的整数编码,还可以用十六进制写字符串str
    u4e2d = 0010 1110 0010 1101 = 20013
    u6587 = 0110 0101 1000 0111 = 29551
  • print('\u4e2d\u6587')
    

  • bytes 类型数据用 b’’ 或 b"" 表示
    ‘ABC’ 是字符串str,一个字符对应多个字节
    b’ABC’ 是以字节为单位,每一个字符占用一个字节
  • x = b'ABC' 
    print(x)
    

    2.解码

    解码:将字节(bytes)转换回字符串

  • 在 bytes 中,无法显示为 ASCII 字符的字节,用 \x## 表示
  • print(b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8'))
    #解码 decode()方法
    #print(b'\xe4\xb8\xad\xff'.decode('utf-8'))
    # \xff 为无法解码的无效字节,decode()会报错
    print(b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore')) 
    # errors='ignore' 忽略错误的字节
    

    3.字符串长度

  • len() : 计算 str 包含多少个字符;如果换成 bytes,len() 就计算字节数
  • print(len('ABC'))   #字符串3个字符
    print(len('中文'))   #字符串2个字符
    print(len(b'ABC'))  #3个字符的bytes,一个字符一个字节,3个字节
    print(len(b'\xe4\xb8\xad\xe6\x96\x87')) #6个字节
    print(len('中文'.encode('utf-8'))) # '中文' 解码成 utf-8,为6个字节
    

    4.格式化字符串

    (1)用 % 实现

    %s —— 表示用字符串替换
    %d —— 表示用整数替换
    %f —— 表示用浮点数替换
    %x —— 表示用十六进制整数替换

  • 有几个 %?占位符,后面就跟几个变量,顺序要一致;如果只有一个 %?,括号可省略
  • print('Hello, %s' % 'gaohui')
    print('Hi, %s, you have ¥%d.' %  ('gaohui',10000000))
    

  • 格式化整数和浮点数可以指定是否补0或者补位数
    %d —— 普通输出
    %2d —— 宽度为2,右对齐
    %02d —— 宽度为2,左补0
    %-2d —— 宽度为2,左对齐
    %.2d —— 最少输出2位,不够前面补0占位
    %.2f —— 强制输出小数点后两位
  • print('%d-%2d-%02d-%-2d-%.2d' % (1,1,1,1,111))
    print('%.2f' % 3.1415926)
    

  • 如果不太确定用什么, %s 永远起作用,会把所有数据类型转换为字符串
  • 如果字符串本身含有%,用 %% 转义表示 %
  • (2)用 format() 实现

  • 用传入的参数依次替换字符串内的占位符{0}、{1}…
  • print('hello,{0},your salary incresses by {1:.1f}%.'.format('gaohui',50.89999))
    

    (3)用 f-string实现

  • f 开头的字符串,字符串中若含有 {xxx},就会以对应变量替换
  • r = 2.5
    s = 3.14 * r ** 2
    print(f'The area of a circle with radius {r} is {s:.2f}') 
    #{r}、{s:.2f}被变量r、s的值替换;并且 .2f 指定保留两位小数
    

    5.eg

    # 计算提升百分比
    a = 99
    b = 150
    r = (b-a)/a*100
    print('提升了%.1f%%' % r) # '%%' 转义表示 '%';%.1f表示保留小数点后一位
    print('提升了{0:.1f}%'.format(r))
    print(f'提升了{r:.1f}%')
    

    作者:echo 慧

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【Python】字符串和编码详解(编码、解码、格式化字符串)

    发表回复