我在 base64 操作上输出了奇怪的结果。我想通过编程下载一些东西,发现链接包含 base64 编码数据 ( {date}.zip
。以下情况可以证明这一点:
> echo "MjAyMS0wMS0xMy56aXA=" | base64 --decode
2021-01-13.zip%
如果我将其传回到base64
,我会得到相同的结果:
> echo "MjAyMS0wMS0xMy56aXA=" | base64 --decode | base64
MjAyMS0wMS0xMy56aXA=
但是,如果我将解码后的字符串直接传递给 base64,我会得到不同的结果:
> echo "2021-01-13.zip" | base64
MjAyMS0wMS0xMy56aXAK
好奇为什么会发生这种情况,以及如何解决。
谢谢!
答案1
比较这两个命令的输出:
echo "MjAyMS0wMS0xMy56aXA=" | base64 --decode | od -c
echo "2021-01-13.zip" | od -c
您将看到打印的内容中没有换行符base64 --decode
(因为您开始的字符串显然没有编码换行符)。echo
打印的内容中有换行符(因为这是echo
工作原理)。现在尝试一下:
echo -n "2021-01-13.zip" | base64
或者更好的:
printf '%s' "2021-01-13.zip" | base64
答案2
Echo 默认添加行尾字符。
尝试不添加行尾:
> echo -n "2021-01-13.zip" | base64
MjAyMS0wMS0xMy56aXA=