我正在将(从终端)编码为 base64。但我猜命令没有正确执行。
$ echo 123456789 | base64
MTIzNDU2Nzg5Cg==
然后当我在base64编码,我得到了这个结果
MTIzNDU2Nzg5
我认为也许echo
也被编码了所以我跑了
$ echo | base64
Cg==
我想我是对的,但这也无济于事,就像另一个例子一样:
$ echo qwertyuiop | base64
cXdlcnR5dWlvcAo=
并且当使用相同的方式编码时base64编码结果是
cXdlcnR5dWlvcA==
毫不奇怪,base64encode 的结果被接受了(在 SMTP 中)
那么,我在这里遗漏了什么?以及如何成功将字符串或数字转换为 base64?
答案1
答案很简单。
echo 123456789 | base64
或者
echo qwertyuiop | base64
你总是会有一个尾随的换行符。
通过使用命令n
的开关来避免此行为echo
% echo -n qwertyuiop | base64
cXdlcnR5dWlvcA==
或使用printf
% printf qwertyuiop | base64
cXdlcnR5dWlvcA==
如您所见,它与返回的结果相同base64编码。
并作为@AndreaCorbellini在评论中说
Base64 每输入 3 个字节就会产生 4 个字节的输出,因此输入字节和输出字节之间永远不会有 1:1 的对应关系。这意味着新行最终可能会以不同的方式进行编码,具体取决于其前后的字节。