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