Python中bytes与str类型的区别及编码解码详解

阿澈
阿澈
发布时间:2026-10-14 | 4人浏览过
原创

本文解析Python中bytes与str类型的核心区别。通过示例说明bytes以b开头及十六进制表示法,解释ASCII与UTF-8编码下字节占用差异。演示bytes解码为str的过程,并分析因非法字节序列导致的UnicodeDecodeError报错原因,帮助开发者理解二进制数据与文本字符串的转换机制。

Python bytes与str类型概述

经过一上午的资料查阅,大致理清了bytes类型与str类型的区别。

bytes类型的表现形式

bytes类型和str类型在呈现形式上存在相似之处。如果打印一个bytes类型的变量,结果会显示为以b开头、单引号括起来的序列。例如:


>>> c = b'\x80abc'
>>> type(c)
bytes

十六进制与ASCII编码解析

我们看到c = b'\x80abc'表示的就是一个bytes类型。是不是和字符串很像?只是前面多出来一个b。那b'\x80abc的含义是什么呢?\x80即16进制的两位数,代表十进制的0-255,同时也代表一个字节,8个bit。abc,即英文字母abc,为什么这里不是\x...的形式呢。因为在utf-8里,一个ASCII码 的储存形式完全不变,一个a也就用一个字节来储存。

UTF-8解码实验

那么b'\x80abc'的储存情况就完全明白了,一共四个字节,每个字节值的情况一目了然。下面再做一个实验。


>>> A = b'\xe5\x9d\x8fHello'.decode("utf-8","strict")
>>> A
'坏Hello'
>>> type(A)
str

首先要知道utf-8是可变长编码。中文字符占3个字节,‘坏'字的utf-8码为\xe5\x9d\x8f 。那么给定一个bytes序列 b'\xe5\x9d\x8fHello', 用utf-8解码,显然能得到坏Hello。并且我们看到,解码之后,A已经变成了str类型,和预想一模一样。

解码失败与报错分析

假如python无法将一个二进制解码成utf-8码,则会报错。比如解码b'\x80abc'则会报错:


  'utf-8' codec can't decode byte 0x80 in position 0:invalid start byte

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表