字符编码

str:‘ABC’
bytes:b’ABC’,在字符串前加b即为bytes类型。
str可以包含英文、中文等字符,bytes只能直接包含中文,如需包含中文,要以中文的Unicode码格式,如"中"字的bytes是b’\xe4\xb8\xad’。
str类型数据在内存中是以Unicode编码格式表示的,由于Unicode比较占存储空间(例如字符A的Unicode编码为00000000 01000001,一个字符对应n个字节),所以在实际存储或传输时,就需要转成bytes类型(一个字符对应1个字节)。

常用的与字符编码相关的函数如下:

函数

说明

实例

ord

获取字符的整数表示

>>> ord(‘A’)
65
>>> ord(‘方’)
26041

chr

将编码转换成字符

>>> chr(65)
‘A’
>>> chr(20013)
‘中’

encode

将str编码为指定的bytes:

纯英文str可以编码成ascii、utf-8,

含中文的str只能编码成utf-8

>>> s=‘ABC’
>>> S=‘中文’
>>> s.encode(‘ascii’)
b’ABC’
>>> s.encode(‘utf-8’)
b’ABC’
>>> S.encode(‘ascii’)
UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-1: ordinal not in range(128)
>>> S.encode(‘utf-8’)
b’\xe4\xb8\xad\xe6\x96\x87’

decode

将bytes按指定的编码转换为str:

纯英文bytes可以转成ascii、utf-8的str,

含中文的bytes只能转成utf-8,因为ascii编码不包含中文

>>> b
b’ABC’
>>> b.decode(‘ascii’)
‘ABC’
>>> b.decode(‘utf-8’)
‘ABC’
>>> b=b’\xe4\xb8\xad\xe6\x96\x87’
>>> b.decode(‘ascii’)
UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe4 in position 0: ordinal not in range(128)
>>> b.decode(‘utf-8’)
‘中文’

len

计算str的字符数,或者bytes的字节数

>>> len(‘ABC’)
3
>>> len(‘中文’)
2
>>> len(b’AA’)
2
>>> len(b’\xe4\xb8\xad\xe6\x96\x87’)
6

格式化

%

Python和C语言一样,使用%运算符来格式化字符串,格式为:“Hello, %s” %

占位符

替换内容

%d

整数

%s

字符串

%f

浮点数

%x

十六进制整数

占位符和%后面的变量或值的个数要一致,当只有一个占位符时,在%后直接加上变量或值,当有多个占位符时,变量或值要用()括起来,用,分隔。

>>> "Hello, %s" % "Python"
'Hello, Python'
>>> "Hello, %s, %d" % ("Python", 2020)
'Hello, Python, 2020'
>>> "Hello, %s %d" % ("Python", year)	# year是一个变量
'Hello, Python 2020'

此外,还可以指定整数或小数的位数,也是和C语言一样:

>>> "%02d" % 18		# %02d表示以整数显示,位数为2,不足2位则在前面补0
'18'
>>> "%04d" % 18
'0018'
>>> "%f" % 10.1		# %f默认只保留6位小数
'10.100000'
>>> "%.2f" % 10.1	# %.2f表示小数点后保留2位
'10.10'

format

字符串中使用{0}、{1}…等占位符,字符串后面跟.format(),()中是变量或值,第一个变量或值对应{0},第2个对应{1}…

>>> "{0}, {1}°C".format('Beijing', 2)
'Beijing, 2°C'
>>> "{0}, {1:.1f}°C".format('Beijing', 2)	# 占位符中数字后可以加上格式化参数
'Beijing, 2.0°C'

f-string

字符串中使用到变量时,可用f-string,格式形如f’xxx {name}’,即在字符串前加f,字符串中用{}把变量名括起来,{name}就会被变量的值替换:

>>> f"{a}"
'中'
>>> f"Beijing  {temp}°C"
'Beijing  2°C'