python系列教程:字符串和编码

0 阅读3分钟

字符串和编码

1. 字符编码基础

1.1 编码的必要性

  • 计算机只能处理数字,必须将文本转换为数字才能处理
  • 最早的计算机使用8比特(bit)作为1字节(byte),单字节最大表示255

1.2 ASCII编码

  • 美国标准,包含127个字符(英文字母、数字、符号)
  • 例如:A=65(01000001),z=122

1.3 多语言编码问题

  • 中文需要GB2312(至少2字节)
  • 日文使用Shift_JIS,韩文使用Euc-kr
  • 多语言混合时会出现乱码

1.4 Unicode解决方案

  • 统一所有语言的编码标准
  • 最常用的是UTF-16(2字节/字符,生僻字4字节)
  • 现代操作系统和编程语言普遍支持

1.5 UTF-8编码

  • Unicode的可变长编码实现
  • 英文字母:1字节
  • 汉字:通常3字节
  • 生僻字符:4-6字节
  • 兼容ASCII(ASCII是UTF-8的子集)

2. 编码工作方式

  • 内存中:统一使用Unicode
  • 存储/传输时:转换为UTF-8
  • 网页通常使用UTF-8编码(<meta charset="UTF-8">

3. Python字符串处理

3.1 基本特性

  • Python 3字符串默认使用Unicode编码
print('包含中文的str')  # 支持多语言

3.2 字符编码转换

  • ord():获取字符的Unicode码点
  • chr():将码点转换为字符
ord('A')  # 65
ord('中')  # 20013
chr(66)  # 'B'
chr(25991)  # '文'

3.3 十六进制表示

'\u4e2d\u6587'  # '中文'

3.4 bytes类型

  • 网络传输/磁盘存储需要转换为bytes
  • 使用b前缀表示
x = b'ABC'  # bytes类型

3.5 编码转换方法

  • encode():str → bytes
  • decode():bytes → str
'ABC'.encode('ascii')  # b'ABC'
'中文'.encode('utf-8')  # b'\xe4\xb8\xad\xe6\x96\x87'
b'ABC'.decode('ascii')  # 'ABC'
b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')  # '中文'

3.6 错误处理

# 忽略解码错误
b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore')  # '中'

3.7 长度计算

len('ABC')  # 3 (字符数)
len('中文')  # 2 
len('中文'.encode('utf-8'))  # 6 (字节数)

3.8 源代码编码

  • 包含中文的Python文件应保存为UTF-8
  • 文件开头添加编码声明:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

4. 字符串格式化

4.1 %格式化(传统方式)

'Hello, %s' % 'world'  # 'Hello, world'
'Hi, %s, you have $%d.' % ('Michael', 1000000)
'%2d-%02d' % (3, 1)  # ' 3-01'
'%.2f' % 3.1415926  # '3.14'
'growth rate: %d %%' % 7  # 'growth rate: 7 %'

4.2 format()方法

'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125)

4.3 f-string(Python 3.6+推荐)

r = 2.5
s = 3.14 * r ** 2
f'The area of a circle with radius {r} is {s:.2f}'
# 'The area of a circle with radius 2.5 is 19.62'

5. 最佳实践

  1. 始终使用UTF-8编码处理文本
  2. 优先使用f-string进行字符串格式化
  3. 处理文件I/O时明确指定编码
  4. 在Python 3中避免使用str和bytes混用

6. 练习示例

# 计算成绩提升百分比
s1 = 72
s2 = 85
r = (s2 - s1) / s1 * 100
print(f'成绩提升了{r:.1f}%')  # 成绩提升了18.1%

7. 总结

  • Python 3字符串原生支持Unicode,完美处理多语言
  • 内存使用Unicode,存储/传输使用UTF-8
  • 字符串格式化推荐使用f-string(Python 3.6+)
  • 始终明确编码转换,避免乱码问题

想要解锁更多 Python 实战黑科技?搜索「道满PythonAI」,海量免费教程随你练,边学边练进步更快! 下一篇想学 Python 什么内容?评论区告诉我!觉得有用就点赞 + 关注,持续更新干货~ 私信【111】进入技术交流群