如何区分Python 3中str与bytes,正确处理Unicode编码问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1213个文字,预计阅读时间需要5分钟。
在Python 3中,乱码错误和类型错误通常是因为没有正确处理字符串(str)和字节(bytes)之间的区别。以下是简要的修改后的内容:
什么时候该用 str,什么时候必须用 bytes
关键看数据来源和用途:
- 用户输入、
print()输出、JSON 解析结果、正则匹配内容、日志消息 → 一定是str - 文件以
'rb'模式打开、HTTP 响应体、socket 收发、hash 计算输入、加密/解密操作 → 必须是bytes - 路径操作(如
os.path.join)、环境变量值、命令行参数 → 视系统而定,但推荐统一用str(Python 3.6+ 已对多数 API 做了透明处理)
一个简单判断:如果内容里有中文、emoji 或其他非 ASCII 字符,且你没手动指定编码,那它大概率应该是 str;如果它是从网络或磁盘“原样读出来”的一串东西(比如图片头、HTTP header raw data),那它就是 bytes。
encode() 和 decode() 怎么选参数
这两个方法不是“可有可无”的装饰,而是类型转换的强制关卡。
本文共计1213个文字,预计阅读时间需要5分钟。
在Python 3中,乱码错误和类型错误通常是因为没有正确处理字符串(str)和字节(bytes)之间的区别。以下是简要的修改后的内容:
什么时候该用 str,什么时候必须用 bytes
关键看数据来源和用途:
- 用户输入、
print()输出、JSON 解析结果、正则匹配内容、日志消息 → 一定是str - 文件以
'rb'模式打开、HTTP 响应体、socket 收发、hash 计算输入、加密/解密操作 → 必须是bytes - 路径操作(如
os.path.join)、环境变量值、命令行参数 → 视系统而定,但推荐统一用str(Python 3.6+ 已对多数 API 做了透明处理)
一个简单判断:如果内容里有中文、emoji 或其他非 ASCII 字符,且你没手动指定编码,那它大概率应该是 str;如果它是从网络或磁盘“原样读出来”的一串东西(比如图片头、HTTP header raw data),那它就是 bytes。
encode() 和 decode() 怎么选参数
这两个方法不是“可有可无”的装饰,而是类型转换的强制关卡。

