【Python】字符串和编码详解(编码、解码、格式化字符串)
文章目录
字符串和编码
在 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:主要用于中文字符编码
print(ord('A'))
print(ord('中'))
print(chr(66))
print(chr(25991))
u4e2d = 0010 1110 0010 1101 = 20013
u6587 = 0110 0101 1000 0111 = 29551
print('\u4e2d\u6587')
‘ABC’ 是字符串str,一个字符对应多个字节
b’ABC’ 是以字节为单位,每一个字符占用一个字节
x = b'ABC'
print(x)
2.解码
解码:将字节(bytes)转换回字符串
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.字符串长度
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))
%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)

(2)用 format() 实现
print('hello,{0},your salary incresses by {1:.1f}%.'.format('gaohui',50.89999))
(3)用 f-string实现
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 慧