如何在Python中用JSON存储十六进制数据?序列化报错及文件损坏问题
解决JSON序列化字节数据的TypeError问题
嘿,我来帮你搞定这个问题!你遇到的TypeError是因为JSON没法直接序列化字节类型的数据——看你的代码里,msg_IV是base64.b64encode(iv)返回的bytes对象,而JSON只认字符串、数字、列表、字典这些原生Python类型,字节对象不在它的支持范围内,这就是报错的根源。另外你提到文件损坏,很大概率是之前的代码抛出异常后没有正确关闭文件,导致写入不完整。
修正方案
我给你调整了两处关键地方:
- 把字节类型的
msg_IV转换为字符串,让JSON可以正常序列化 - 使用
with语句管理文件操作,自动处理文件关闭,避免损坏
修正后的完整代码:
import os import base64 import json iv = os.urandom(16) msg_IV = base64.b64encode(iv).decode('utf-8') # 将bytes转成UTF-8字符串 padding = u'\u0000' file_data = {"IV": msg_IV, "Padding Character": padding} # with语句会自动帮你关闭文件,无需手动调用close() with open("local.txt", "w", encoding='utf-8') as fp: json.dump(file_data, fp, indent=4)
补充说明
base64.b64encode()返回的字节内容是ASCII兼容的,用utf-8解码完全安全,不会出现乱码问题- 你的
padding是\u0000(空字符),JSON本身支持序列化这个字符,但部分文本编辑器打开时可能显示异常,如果这不是你想要的填充符,可以根据需求调整
内容的提问来源于stack exchange,提问作者User1491
相关产品推荐
相关产品推荐

