【发布时间】:2021-08-23 23:40:41
【问题描述】:
我有一个特定的字符串,我需要在 Go 中运行 base64 解码。这个字符串看起来像这样:
qU4aaakFmjaaaaI5aaa\/EN\/aaa\/SaaaJaaa6aa+nGnk=
请注意,这不是完全相同的字符串,但它确实具有相同的形状和字符数、填充字符,并且在字符串中的相同位置有那些 \/ 东西。
我们称之为钥匙。
如果我在 PHP 中运行
base64_decode($key);
解码操作成功
如果我在 Python 中运行
base64.b64decode(key)
解码操作再次成功。问题是,我不能在 Go 中对这个东西进行 base64 解码。
dcd, err := base64.StdEncoding.DecodeString("qU4aaakFmjaaaaI5aaa\\/EN\\/aaa\\/SaaaJaaa6aa+nGnk=")
if err != nil {
log.Fatal(err)
}
return dcd
这将返回错误
illegal base64 data at input byte 19
在 Go 版本中,我必须避开那些反斜杠。似乎错误出现在字节 19。请记住,我作为示例使用的这个字符串与实际导致问题的字符串具有相同的长度,我相信错误发生在带有 \ 的字节上特点。我该怎么办?
【问题讨论】:
-
标准 Base64 的字母表不包含反斜杠。所以
qU4aaakFmjaaaaI5aaa\/EN\/aaa\/SaaaJaaa6aa+nGnk=输入不是有效的 Base64 编码字符串。你能指望什么?其他语言如何跳过或省略此错误不适用于 Go。 -
关于如何让它工作的任何建议?我正在将此字符串与其他两种语言一起使用,并且无法更改它。我尝试删除 \ / 字符,最终在字节 40 上出现错误(现在包含 "=" )。也删除了那个,但它给出了字节 0 的错误。
-
正斜杠是 Base64 中的有效字符,而不是反斜杠。
\/可能是一个指定单个斜杠的序列。如果是这样,请将\/序列替换为单个/,然后您就可以开始了。 -
删除反斜杠给我留下了
qU4aaakFmjaaaaI5aaa/EN/aaa/SaaaJaaa6aa+nGnk=,但这也会返回一个错误:illegal base64 data at input byte 0 -
删除反斜杠会产生有效的 Base64 输入,请在 Go Playground 上尝试。