You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3中bytes转str及逆向转换:含图片数据转换场景

在Python3中实现Bytes与字符串的互转(针对图片二进制数据)

嘿,针对你读取图片后得到的bytes类型数据,我来一步步教你怎么转成str,以及如何逆向转回bytes——特别要注意,图片是二进制数据,不能用普通的文本编码(比如utf-8)来处理,否则会丢失数据或者报错!

一、将Bytes转换为字符串

因为图片这类二进制数据包含很多非文本字节,必须用无损编码来转换,这里推荐两种可靠的方式:

1. 使用Base64编码(最推荐)

Base64是专门为二进制数据设计的编码方式,能把任意二进制转换成可打印的ASCII字符串,完全不会丢失数据,适合传输或存储二进制内容:

import base64

# 假设你已经通过read_image拿到了image_data(bytes类型)
image_data = read_image("/home/user/icon.jpg")

# Bytes转字符串
image_str = base64.b64encode(image_data).decode('utf-8')

2. 使用Latin-1编码(单字节映射)

Latin-1(也叫iso-8859-1)是单字节编码,每个字节对应唯一的字符,也是无损转换,但字符串里会包含很多不可打印的字符,适合临时转换,不适合传输:

# Bytes转字符串
image_str = image_data.decode('latin-1')

⚠️ 注意:绝对不要用utf-8来解码图片的bytes!因为utf-8只能处理符合文本规范的字节,图片里的二进制数据大概率会触发UnicodeDecodeError,即使不报错,也会丢失原始数据,无法逆向还原。

二、将字符串逆向转回Bytes

对应上面两种转换方式,逆向操作也很简单:

1. Base64编码的逆向转换

# 字符串转回Bytes
image_bytes = base64.b64decode(image_str)

转换后的image_bytes和最初的image_data完全一致,可以直接用来保存图片或者做其他二进制操作。

2. Latin-1编码的逆向转换

# 字符串转回Bytes
image_bytes = image_str.encode('latin-1')

同样,这个转换也是完全无损的,还原后的字节和原始数据一模一样。

完整示例

把整个流程串起来:

import base64

def read_image(path):
    with open(path, "rb") as f:
        data = f.read()
    return data

# 读取图片得到bytes
image_data = read_image("/home/user/icon.jpg")

# 转成字符串(用Base64)
image_str = base64.b64encode(image_data).decode('utf-8')

# 转回bytes
restored_image_data = base64.b64decode(image_str)

# 验证是否一致(应该输出True)
print(image_data == restored_image_data)

内容的提问来源于stack exchange,提问作者user3410960

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:45:25