讲师中心 微信公众号

工具推荐

视频效率加速
Seko
Seko

AI短剧一键生成成片

updream

一键生成高质量推广成片

AniShort
AniShort

AI短剧协同制作平台

立刻MV
立刻MV

低成本歌曲 MV、视频生成

Python 字符串与 bytes 的区别与转换

秋静酱_1810

秋静酱_1810

发布时间:2026-02-11 21:12:10

|

3764人浏览过

|

来源于php中文网

原创

Python 3 严格区分 str(文本)和 bytes(二进制),二者类型、内存表示及操作接口均不同,混用导致 TypeError 或 UnicodeDecodeError;必须用 .encode() 和 .decode() 显式转换,且编码名需准确匹配。

python 字符串与 bytes 的区别与转换

bytes 和 str 在 Python 里不是能自动互转的“同一种东西”

Python 3 强制区分文本(str)和二进制数据(bytes),它们类型不同、内存表示不同、操作接口也不同。试图直接拼接、比较或传参时出错,比如 TypeError: can't concat bytes to str 或 UnicodeDecodeError,根本原因就是混用了这两类对象。

关键判断:只要涉及文件读写、网络传输、编码处理、加密哈希等场景,就必须明确当前变量是 str 还是 bytes,不能靠“看起来像字符串”来猜测。

什么时候必须用 .encode() 和 .decode()

.encode() 把 str 变成 bytes,.decode() 把 bytes 变回 str。这不是可选项,是类型转换的唯一合法方式。漏掉、反向调用、或编码名不匹配,都会立刻报错。

  • 读文件时用 open(..., 'r', encoding='utf-8') → 返回 str;用 open(..., 'rb') → 返回 bytes,此时不能直接 .split('\n'),得先 .decode('utf-8')
  • HTTP 响应体(如 requests.get(...).content)是 bytes,要转文本必须显式 .decode('utf-8')(注意:不是所有响应都声明了编码,别硬写 response.text 就以为安全)
  • subprocess.run(..., stdout=subprocess.PIPE) 的 stdout 是 bytes,打印前要么 decode,要么用 text=True 参数让 subprocess 自动处理
  • 错误信息里出现 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0,说明你拿 utf-8 去解码一个其实是 gbk 或带 BOM 的 bytes,得换编码重试

常见坑:encode/decode 的参数不是摆设

编码名写错、省略、或依赖默认值,是隐形雷区。Python 默认编码是 utf-8,但很多老系统、Windows 文件、Excel 导出 CSV 默认用 gbk 或 cp1252。不指定或写错,程序可能在一台机器跑通,换一台就崩。

Python Hardener
Python Hardener

通过完整的安全审查、代码整洁重构、健壮的错误处理、正确的日志记录以及完整的文档字符串覆盖,强化 Python 脚本。

下载

立即学习“Python免费学习笔记(深入)”;

  • '中文'.encode() 等价于 '中文'.encode('utf-8'),没问题;但 b'\xc4\xe3'.decode() 会按 utf-8 解,实际是 gbk 编码,就报错
  • 用 open(..., 'w') 写 str 时,encoding 不写等于用系统默认,Linux 是 utf-8,Windows 控制台可能是 cp936,结果文件在别处打不开
  • 网络协议(如 HTTP header、JSON RPC)通常要求 ASCII-only 的 bytes,传中文 str 过去会直接失败,得先 encode 成 utf-8 再构造成 header 字段

len()、切片、in 操作的行为差异

对 str 和 bytes 同样写 len(s) 或 s[0:3],结果完全不同:前者按 Unicode 字符数算,后者按字节数算。这个差异在截断、分块、协议解析时极易出错。

  • len('€') 是 1(一个字符),len('€'.encode('utf-8')) 是 3(UTF-8 下欧元符号占 3 字节)
  • b'abc\xff'[0:2] 返回 b'ab';'café'[0:2] 返回 'ca';但 'café'.encode()[0:2] 是 b'ca',而 'café'.encode()[0:3] 是 b'caf' —— 因为 é 在 UTF-8 中是 2 字节,开头 3 字节刚好卡在中间,decode 会失败
  • b'hello' in b'hello world' 是 True;'hello' in b'hello world' 是 False(类型不匹配,直接报错)

真正麻烦的是那些“看起来能过,其实逻辑错”的地方:比如按字节长度切日志行、用 bytes.find() 找 ASCII 关键字、却忘了输入可能是带 emoji 的 str —— 这类问题不会立刻报错,但数据会被截断或错位。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

讯飞智文

一款面向学习和办公场景的AI文档创作工具,可辅助生成PPT与Word文档,提高资料整理和内容制作效率。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2315

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

3802

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1256

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

4419

2025.09.10

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1918

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

3144

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6364

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

6489

2023.11.24

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

0

2026.11.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn