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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:18:05