Base64编码触发格式无效错误,该如何排查解决?
解决Base64编码时的格式无效错误
你的问题出在手动构造JSON字符串时的语法错误,导致生成的内容不是有效的JSON,进而使得Base64编码后的内容不符合格式要求。以下是具体问题和解决方案:
问题分析
你写的f-string存在两个关键错误:
- JSON的键必须用双引号包裹,但代码里的键(如
threeDSServerTransID)没有加引号,会被Python当成变量名而非字符串键。 - 要插入的变量(
threeDSServerTransID、acsTransID)没有用{}包裹,无法正确替换为变量值,最终生成的字符串完全不是有效的JSON结构。
解决方案
方法一:修正f-string写法
手动修正f-string的语法,确保生成有效的JSON字符串:
import base64 # 注意:大括号需要用双大括号转义,变量用{}包裹,键和字符串值用双引号 creqBytes = bytes(f'{{"threeDSServerTransID":"{threeDSServerTransID}","transStatus":"Y","acsTransID":"{acsTransID}","messageType":"CRes","messageVersion":"2.1.0"}}', 'utf-8') creq2 = base64.b64encode(creqBytes).decode("ascii") print(creq2)
方法二:使用json模块生成JSON(推荐)
手动拼接JSON容易出错,用json模块可以自动处理语法细节,更可靠:
import json import base64 # 先构造Python字典 creq_data = { "threeDSServerTransID": threeDSServerTransID, "transStatus": "Y", "acsTransID": acsTransID, "messageType": "CRes", "messageVersion": "2.1.0" } # 转换为标准JSON字符串 creq_json = json.dumps(creq_data) # 编码为Base64 creq2 = base64.b64encode(creq_json.encode('utf-8')).decode("ascii") print(creq2)
内容的提问来源于stack exchange,提问作者Maxii Paguera
相关产品推荐
相关产品推荐

