字符串方法与编码
本教程共 70 篇 · 第 11 篇 · 更新于 2026-07-22 · 约 3 分钟阅读
11. 字符串方法与编码
本节目标:掌握常用字符串方法,理解 Unicode 和 UTF-8 编码,能正确处理中文文本。
常用字符串方法
字符串是不可变的,所有方法都返回新字符串,原字符串不变。
大小写转换
>>> "hello".upper()
'HELLO'
>>> "HELLO".lower()
'hello'
>>> "hello world".title() # 每个单词首字母大写
'Hello World'
>>> "hello".capitalize() # 首字母大写
'Hello'
查找与替换
>>> "hello world".find("world") # 返回索引,找不到返回 -1
6
>>> "hello world".index("world") # 返回索引,找不到抛 ValueError
6
>>> "hello world".count("l") # 统计出现次数
3
>>> "hello world".replace("world", "Python")
'hello Python'
>>> "hello".startswith("he") # 判断是否以某子串开头
True
>>> "hello".endswith("lo") # 判断是否以某子串结尾
True
去除空白
>>> " hello ".strip() # 去两端空白
'hello'
>>> " hello ".lstrip() # 去左边空白
'hello '
>>> " hello ".rstrip() # 去右边空白
' hello'
可以指定去除的字符:
>>> "###hello###".strip("#")
'hello'
分割与连接
>>> "apple,banana,orange".split(",")
['apple', 'banana', 'orange']
>>> "a b c".split() # 不传参数按任意空白分割
['a', 'b', 'c']
>>> "-".join(["2024", "07", "21"])
'2024-07-21'
Tip
split()和join()是字符串处理的黄金组合。先 split 拆开处理,再 join 拼回去。
判断类方法
>>> "123".isdigit() # 是否全是数字
True
>>> "abc".isalpha() # 是否全是字母
True
>>> "abc123".isalnum() # 是否全是字母或数字
True
>>> " ".isspace() # 是否全是空白
True
>>> "hello".islower() # 是否全是小写
True
对齐与填充
>>> "hi".center(10) # 居中,宽度 10
' hi '
>>> "hi".ljust(10) # 左对齐
'hi '
>>> "hi".rjust(10) # 右对齐
' hi'
>>> "42".zfill(5) # 左侧补零
'00042'
字符串与编码
计算机只能存储数字。文字要存进计算机,必须先转换成数字,这个过程叫编码。
ASCII
最早的编码是 ASCII,用 1 个字节(8 位)表示一个字符,只覆盖了英文字母、数字和常见符号,最多 128 个字符。中文、日文、 emoji 都装不下。
Unicode
Unicode 给世界上每个字符分配了唯一的编号,称为「码点」(code point)。比如:
- 英文字母
A:码点U+0041 - 中文字「中」:码点
U+4E2D - emoji
😀:码点U+1F600
NoteUnicode 是字符集,只定义了「每个字符对应哪个数字」,没规定怎么存到计算机里。
UTF-8
UTF-8 是 Unicode 的一种实现方式,也是现在互联网上最主流的编码。它的特点是变长编码:
- 英文字母:1 个字节
- 常用汉字:3 个字节
- emoji 等特殊字符:4 个字节
>>> len("A".encode("utf-8"))
1
>>> len("中".encode("utf-8"))
3
>>> len("😀".encode("utf-8"))
4
这样既兼容 ASCII,又能表示全世界所有字符,所以成为首选。
Python 3 的字符串模型
Python 3 的字符串(str)内部统一用 Unicode 存储。无论源码文件是什么编码,运行时字符串都是 Unicode。
>>> s = "中文"
>>> type(s)
<class 'str'>
>>> len(s) # 按字符数算,不是字节数
2
把字符串转换成字节序列(bytes),需要指定编码:
>>> s = "中文"
>>> b = s.encode("utf-8")
>>> b
b'\xe4\xb8\xad\xe6\x96\x87'
>>> type(b)
<class 'bytes'>
>>> b.decode("utf-8") # 字节转回字符串
'中文'
Warning文件开头建议加编码声明,避免中文乱码:
# -*- coding: utf-8 -*-现代编辑器默认 UTF-8,这条声明在大部分场景是可选的。但如果你的文件要在不同环境传递,加上更安全。
一些实用技巧
判断子串是否存在
>>> "world" in "hello world"
True
字符串模板
from string import Template
t = Template("Hello, $name!")
print(t.substitute(name="Alice"))
# Hello, Alice!
这在需要用户输入模板内容时比 f-string 更安全,因为不会执行任意代码。
多行字符串去缩进
from textwrap import dedent
text = """
line 1
line 2
"""
print(dedent(text)) # 去除公共缩进
来源:参考了 runoob「Python3 字符串」、liaoxuefeng「字符串和编码」、w3cschool「Python3 字符串」等,改写后所得。