导航菜单

  • 1.Python介绍
  • 2.Python解释器
  • 3.安装Python
  • 4.VSCode开发Python
  • 5.print
  • 6.进制
  • 7.编码
  • 8.Unicode2UTF8
  • 9.整数类型
  • 10.字符串类型
  • 11.布尔类型
  • 12.变量与内存
  • 13.浮点类型
  • 14.注释
  • 15.if条件
  • 16.while循环
  • 17.运算符
  • 18.输入
  • 19.列表
  • 20.元组
  • 21.集合
  • 22.字典
  • 23.for循环
  • 7.1 编码是什么?
  • 7.2 str 与 bytes
  • 7.3 UTF-8
  • 7.4 读写文件
  • 7.5 项目开发要点

7.1 编码是什么? #

计算机只能存二进制。文字要进计算机,必须先按一套规则映射成字节——这套规则就是编码。

早期各国各自一套编码(GBK、Big5 等),同一串字节用不同规则解读就会乱码。现在统一用 Unicode 字符集 + UTF-8 编码,项目开发中几乎只需关心这一对组合。

7.2 str 与 bytes #

类型 含义 典型场景
str 程序里的文本(Unicode 字符) 变量、JSON 字段、业务逻辑
bytes 编码后的二进制数据 读文件、网络传输、写磁盘
s = "Hello 世界"                    # str
b = s.encode("utf-8")              # bytes: b'Hello \xe4\xb8\x96\xe7\x95\x8c'
print(b.decode("utf-8"))           # 还原为 str: Hello 世界
  • 编码:str → bytes,text.encode("utf-8")
  • 解码:bytes → str,data.decode("utf-8")

解码时用的编码必须和编码时一致,否则会 UnicodeDecodeError 或出现乱码。

7.3 UTF-8 #

UTF-8 是互联网和现代软件的默认编码:

  • 英文 1 字节,中文通常 3 字节,兼容 ASCII
  • Python 3 源码默认 UTF-8;读写文件、HTTP、JSON 都应显式使用 UTF-8
text = "你好"
print(text.encode("utf-8"))   # b'\xe4\xbd\xa0\xe5\xa5\xbd'
print(len("A".encode("utf-8")))   # 1
print(len("你".encode("utf-8")))  # 3

7.4 读写文件 #

读写文本文件时务必指定 encoding,避免 Windows 下用系统默认编码(如 GBK)导致乱码:

# 写入
with open("data.txt", "w", encoding="utf-8") as f:
    f.write("你好")

# 读取
with open("data.txt", "r", encoding="utf-8") as f:
    content = f.read()

7.5 项目开发要点 #

  1. 统一 UTF-8:源码、配置文件、数据库连接、API 响应头(Content-Type: charset=utf-8)全部使用 UTF-8
  2. 文件必写 encoding:open(..., encoding="utf-8"),不要依赖系统默认
  3. 区分 str 和 bytes:业务逻辑用 str;从 socket、文件读到的原始数据是 bytes,先 decode 再处理
  4. 遇到乱码:先核对「写入编码」和「读取编码」是否一致,再查中间环节(编辑器、数据库、HTTP 头)是否混用了 GBK 等旧编码
  5. 遗留数据:老系统 GBK 文件可用 content.decode("gbk") 单独处理,新代码仍应输出 UTF-8
← 上一节 6.进制 下一节 8.Unicode2UTF8 →

访问验证

请输入访问令牌

Token不正确,请重新输入