将 utf-8 字符串转换为 base64
Convert utf-8 string to base64
我转换成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"}"}
但结果是一样的
你想要的结果就是base64.b64decode(str1 + "==")
。有关填充的更多信息,请参阅 this post。
问题是 \"
是单个字符 "
的 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 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"}"}
但结果是一样的
你想要的结果就是base64.b64decode(str1 + "==")
。有关填充的更多信息,请参阅 this post。
问题是 \"
是单个字符 "
的 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)