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

Socket传输加密Base64图片后解码报错:TypeError问题求助

问题分析与解决

你遇到的问题核心是:解密后的变量b是字符串形式的bytes对象表示(比如打印出来的b'/9j/...'其实是字符串,不是真正的bytes),而wb模式的文件写入要求传入bytes类型,因此触发TypeError。

错误原因

打印出来的b'/9j/4AAQSkZJRgABAQAAAQ......oooA/9k='是Python对bytes对象的字符串化输出,实际你的变量b是一个包含b'前缀和'后缀的字符串,并非真正的bytes类型。

解决方案

直接对解密后的字符串做清洗,提取纯Base64内容,再编码为bytes后进行解码,同时可以去掉中间冗余的文件读写操作:

修改后的代码:

import base64

while True:
    data = connection.recv(2000000)
    if data:
        # 接收的字节数据转字符串
        encrypted_str = data.decode("utf-8")
        # 解密得到带b''包裹的字符串
        decoded_str = decrypt(encrypted_str, key)
        # 提取纯Base64内容:移除开头的b'和结尾的'(兼容双引号情况)
        base64_content = decoded_str.strip("b'\"")
        # 将Base64字符串编码为字节,再解码为图片二进制数据
        image_bytes = base64.b64decode(base64_content.encode('utf-8'))
        # 写入图片文件
        with open('camera.jpeg', 'wb') as decodeit:
            decodeit.write(image_bytes)

关键修改点

  • 移除了写入encode.bin再读取的冗余步骤,直接在内存中处理数据,提升效率
  • 对解密后的字符串做清洗,去掉b'和'的包裹,得到纯Base64字符串
  • 将纯Base64字符串编码为bytes后,再用base64.b64decode解码为图片二进制数据

这样就能避免TypeError,同时正确还原出图片。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:57:37