首页 / Python3 入门教程 / 字符串方法与编码

Python3 入门教程

字符串方法与编码

本教程共 70 篇 · 第 11 篇 · 更新于 2026-07-22 · 约 3 分钟阅读

PythonPython3 入门教程字符串方法UTF-8 编码Unicodeencode-decode

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
Note

Unicode 是字符集,只定义了「每个字符对应哪个数字」,没规定怎么存到计算机里。

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 字符串」等,改写后所得。