簡體   English   中英

如何在 python 中編碼為 Base64?

[英]How to Encode to Base64 in python?

嘿,我正在嘗試將某些內容編碼為 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)

ValueError: Invalid format specifier錯誤消息來自您的第一行。 這是因為在字符串之前有一個f表示這將是一個帶有f 字符串格式的字符串 但是,您沒有在字符串中放置任何 f 字符串格式。 因此出現錯誤消息。

我能夠通過刪除f來運行它。 這是我的測試:

import base64

creqBytes = bytes('{"threeDSServerTransID":threeDSServerTransID,"transStatus":"Y","acsTransID":acsTransID,"messageType":"CRes","messageVersion":"2.1.0"}', 'utf-8')
print(creqBytes)
# b'{"threeDSServerTransID":threeDSServerTransID,"transStatus":"Y","acsTransID":acsTransID,"messageType":"CRes","messageVersion":"2.1.0"}'

creq2 = base64.b64encode(creqBytes).decode("ascii")
print(creq2)
# eyJ0aHJlZURTU2VydmVyVHJhbnNJRCI6dGhyZWVEU1NlcnZlclRyYW5zSUQsInRyYW5zU3RhdHVzIjoiWSIsImFjc1RyYW5zSUQiOmFjc1RyYW5zSUQsIm1lc3NhZ2VUeXBlIjoiQ1JlcyIsIm1lc3NhZ2VWZXJzaW9uIjoiMi4xLjAifQ==

但是,我懷疑這不是您想要做的。 我的猜測是您想在字符串中包含 Python 中的一些變量。 如果是這種情況,那么 f 字符串將如下所示:

import base64

threeDSServerTransID = 2
acsTransID = 3

creqBytes = bytes(f'{{"threeDSServerTransID":{threeDSServerTransID},"transStatus":"Y","acsTransID":{acsTransID},"messageType":"CRes","messageVersion":"2.1.0"}}', 'utf-8')
print(creqBytes)
# b'{"threeDSServerTransID":2,"transStatus":"Y","acsTransID":3,"messageType":"CRes","messageVersion":"2.1.0"}'
creq2 = base64.b64encode(creqBytes).decode("ascii")
print(creq2)
# eyJ0aHJlZURTU2VydmVyVHJhbnNJRCI6MiwidHJhbnNTdGF0dXMiOiJZIiwiYWNzVHJhbnNJRCI6MywibWVzc2FnZVR5cGUiOiJDUmVzIiwibWVzc2FnZVZlcnNpb24iOiIyLjEuMCJ9

f 字符串的這種格式看起來容易出錯並且其他人難以閱讀。 我懷疑將數據作為 Python 字典並將其輸出為 JSON 格式,然后再進行 base64 編碼可能更容易理解和閱讀。 這看起來像:

import base64
import json

threeDSServerTransID = 2
acsTransID = 3

var1 = {
    "threeDSServerTransID": threeDSServerTransID,
    "transStatus": "Y",
    "acsTransID": acsTransID,
    "messageType": "CRes",
    "messageVersion": "2.1.0"
}
var2 = json.dumps(var1)
print(var2)
# '{"threeDSServerTransID": 2, "transStatus": "Y", "acsTransID": 3, "messageType": "CRes", "messageVersion": "2.1.0"}'

var3 = base64.b64encode(var2.encode())
print(var3)
# b'eyJ0aHJlZURTU2VydmVyVHJhbnNJRCI6IDIsICJ0cmFuc1N0YXR1cyI6ICJZIiwgImFjc1RyYW5zSUQiOiAzLCAibWVzc2FnZVR5cGUiOiAiQ1JlcyIsICJtZXNzYWdlVmVyc2lvbiI6ICIyLjEuMCJ9'
print(var3.decode('ascii'))
# eyJ0aHJlZURTU2VydmVyVHJhbnNJRCI6IDIsICJ0cmFuc1N0YXR1cyI6ICJZIiwgImFjc1RyYW5zSUQiOiAzLCAibWVzc2FnZVR5cGUiOiAiQ1JlcyIsICJtZXNzYWdlVmVyc2lvbiI6ICIyLjEuMCJ9

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM