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

Python中Base64解码后无法解析JSON且重新编码失败问题

解决Base64解码后含隐藏字符无法解析JSON的问题

1. 定位隐藏字符类型

先解码后逐个检查字符编码,找出不可见的隐藏字符:

import base64

# 替换为你的Base64字符串
base64_str = "YOUR_BASE64_STRING_HERE"
decoded_bytes = base64.b64decode(base64_str)

# 打印每个字节的十六进制和对应字符,排查隐藏字节
for idx, byte in enumerate(decoded_bytes):
    print(f"索引{idx}: 十六进制{hex(byte)} 字符: {repr(chr(byte))}")

# 解码为字符串后,检查Unicode码点
decoded_str = decoded_bytes.decode()
for idx, char in enumerate(decoded_str):
    print(f"索引{idx}: Unicode码点{ord(char)} 字符: {repr(char)}")

通过输出可明确隐藏字符是控制字符、零宽字符还是其他不可见类型。

2. 清除隐藏字符

根据排查结果,用以下方法过滤不可见字符:

  • 方法一:保留可打印字符
    直接筛选出isprintable()为True的字符:
cleaned_str = ''.join([c for c in decoded_str if c.isprintable()])
  • 方法二:正则匹配排除控制字符
    精准移除ASCII和扩展ASCII控制字符:
import re
# 移除所有控制字符(\x00-\x1F为ASCII控制符,\x7F-\x9F为扩展控制符)
cleaned_str = re.sub(r'[\x00-\x1F\x7F-\x9F]', '', decoded_str)
  • 特殊情况:处理UTF-8 BOM
    如果字符串开头是UTF-8字节顺序标记(\ufeff),直接截断开头:
if decoded_str.startswith('\ufeff'):
    cleaned_str = decoded_str[1:]

3. 验证JSON解析

清理后尝试解析为JSON,确认是否正常:

import json
try:
    json_data = json.loads(cleaned_str)
    print("JSON解析成功:", json_data)
except json.JSONDecodeError as e:
    print(f"解析失败:{e}")

4. 重新编码的正确方式

若需重新编码为Base64,先将清理后的字符串转为UTF-8字节,再执行编码:

# 转为UTF-8字节
encoded_bytes = cleaned_str.encode('utf-8')
# Base64编码并转为字符串
new_base64 = base64.b64encode(encoded_bytes).decode('utf-8')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 01:40:13