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
相关产品推荐
相关产品推荐

