python中bytes类型专用于处理不可变的二进制数据,是str与底层数据流的关键桥梁;必须通过encode()和decode()显式转换,且编码需一致,否则引发错误。

Python 中的 bytes 类型专用于处理**不可变的二进制数据**,不是用来存文本的,而是对接底层数据流的关键桥梁。它在编码转换、网络通信、文件操作等场景中高频出现,用错类型容易引发 TypeError 或乱码。
处理文本编码与解码
字符串(str)和字节(bytes)必须显式转换,不能混用。这是 Python 3 的核心设计原则。
-
字符串 → 字节:用
.encode(),必须指定编码(如"utf-8")s = "你好"; b = s.encode("utf-8")→b'\xe4\xbd\xa0\xe5\xa5\xbd' -
字节 → 字符串:用
.decode(),编码需与编码时一致b.decode("utf-8")→"你好" - 若编码不匹配(如用
"ascii"解 UTF-8 字节),会触发UnicodeDecodeError
网络数据收发
TCP/UDP 套接字的 send() 和 recv() 方法只接受 bytes,传字符串会报错。
一款AI工具,主要用于管理 OpenClaw 所使用的来自 OpenRouter 的免费 AI 模型。自动按质量对模型进行排序,配置回退机制以应对速率限制,并更新 opencla...,适合需要提升相关任务效率的用户。
- 发送前必须编码:
sock.send("PING".encode("utf-8")) - 接收后需解码才能当文本用:
data = sock.recv(1024); text = data.decode("utf-8") - 如果协议含二进制字段(如长度头、标志位),应直接按字节解析,避免盲目解码
读写二进制文件
打开文件时用 "rb"(读二进制)或 "wb"(写二进制)模式,内容以 bytes 形式进出。
- 读图片:
with open("logo.png", "rb") as f: img_data = f.read()→ 返回bytes - 写配置块:
with open("config.bin", "wb") as f: f.write(b"\x01\x00\xFF\x0A") - 切忌用
"r"模式读二进制文件——可能因换行符处理出错;也别用"w"写,会默认编码为系统 locale,破坏原始字节
字节序列基础操作
bytes 支持切片、拼接、查找等,但返回值仍是 bytes,且所有参数也得是 bytes。
- 切片取子序列:
b = b"hello world"; b[0:5]→b'hello' - 拼接:
b"abc" + b"def"→b"abcdef"(不能b"abc" + "def") - 查找与分割:
b.find(b"o")返回位置;b.split(b" ")→[b'hello', b'world'] - 长度用
len():返回字节数,不是字符数(len("你好".encode("utf-8"))是 6,不是 2)










