将utf8字符串转换为base64

2024-04-20 07:18:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我转换了base64 str1=eyJlbXBsb3llciI6IntcIm5hbWVcIjpcInVzZXJzX2VtcGxveWVyXCIsXCJhcmdzXCI6XCIxMDQ5NTgxNjI4MzdcIn0ifQ

到str2={"employer":"{\"name\":\"users_employer\",\"args\":\"104958162837\"}"}

http://www.online-decoder.com/ru的帮助下

我想借助python将str2转换为str1。我的代码:

import base64

data = """{"employer":"{"name":"users_employer","args":"104958162837"}"}"""
encoded_bytes = base64.b64encode(data.encode("utf-8"))
encoded_str = str(encoded_bytes, "utf-8")
print(encoded_str)

代码打印str3=

eyJlbXBsb3llciI6InsibmFtZSI6InVzZXJzX2VtcGxveWVyIiwiYXJncyI6IjEwNDk1ODE2MjgzNyJ9In0=

我应该如何更改代码以打印str1而不是str3

我试过了

{"employer":"{\"name\":\"users_employer\",\"args\":\"104958162837\"}"}

{"employer":"{"name":"users_employer","args":"104958162837"}"}

但结果是一样的


Tags: 代码namedatabytesargsusersutfencoded
2条回答

问题在于\"是单个字符"的python转义序列。解决方法是保留反斜杠并使用原始字符串(注意前面的“r”)

data = r"""{"employer":"{\"name\":\"users_employer\",\"args\":\"104958162837\"}"}"""

这将是原始字符串,除了python使用“=”符号将base64数字填充为4个字符的倍数。剥去填充物,你就得到了原版

import base64

str1 = "eyJlbXBsb3llciI6IntcIm5hbWVcIjpcInVzZXJzX2VtcGxveWVyXCIsXCJhcmdzXCI6XCIxMDQ5NTgxNjI4MzdcIn0ifQ"
str1_decoded = base64.b64decode(str1 + "="*divmod(len(str1),4)[1]).decode("ascii")
print("str1", str1_decoded)

data = r"""{"employer":"{\"name\":\"users_employer\",\"args\":\"104958162837\"}"}"""
encoded_bytes = base64.b64encode(data.encode("utf-8"))
encoded_str = str(encoded_bytes.rstrip(b"="), "utf-8")
print("my encoded", encoded_str)
print("same?", str1 == encoded_str)

您想要的结果只是base64.b64decode(str1 + "==")。有关填充的详细信息,请参见this post

相关问题 更多 >