leeand00 Asked: 2018-07-09 10:48:52 +0800 CST2018-07-09 10:48:52 +0800 CST 2018-07-09 10:48:52 +0800 CST 如何将 base64 utf-8 编码字符串从 bash 转换为二进制文件? 772 有没有可以在 bash 中执行此操作的工具? bash base64 1 个回答 Voted Best Answer user232326 2018-07-09T13:38:30+08:002018-07-09T13:38:30+08:00 套餐 是的,有几个。该软件包coreutils(默认安装在 debian 中)带有base32和base64。他们可以编码或解码: $ printf '%s' "abc" | base64 YWJj $ printf '%s' "abc" | base64 | base64 -d abc 了解使用 echo 可能会添加一个尾随新行,这将更改生成的 base64 编码字符串: $ echo "abc" | base64 YWJjCg== 还有其他包在包basez和openssl. 后者通常也默认安装,前者不是。 $ printf '%s' "abc" | openssl base64 YWJj 编码 源字符串在任何语言环境(代码页)中编码与 base64 编码无关。base64 程序编码字节,而不是字符。 $ printf '%s' "éäìǫ" | base64 | base64 -d éäìǫ 将在任何系统上完全相同。好吧,在任何理智的系统中,它也将在命令行上echo "éäìǫ"打印。éäìǫ 当然,如果源字符串在一个系统中编码,然后在具有不同语言环境的系统中解码,那么您很可能会得到一个Mojibake字符串。那不是base64要解决的问题,而是要通过改变字符串的编码来解决的问题。可能与iconv. $ echo -n "Москва" | base64 # in a utf8 locale 0JzQvtGB0LrQstCw 但是,在带有 iso889-5 的西里尔文语言环境中(可能是 ru_RU.ISO-8859-5,还有其他带有西里尔文的语言): $ echo "0JzQvtGB0LrQstCw" | base64 -d ааОбаКаВаА $ echo "0JzQvtGB0LrQstCw" | base64 -d | iconv -f utf8 -t iso8859-5 Москва
套餐
是的,有几个。该软件包
coreutils
(默认安装在 debian 中)带有base32和base64。他们可以编码或解码:了解使用 echo 可能会添加一个尾随新行,这将更改生成的 base64 编码字符串:
还有其他包在包
basez
和openssl
. 后者通常也默认安装,前者不是。编码
源字符串在任何语言环境(代码页)中编码与 base64 编码无关。base64 程序编码字节,而不是字符。
将在任何系统上完全相同。好吧,在任何理智的系统中,它也将在命令行上
echo "éäìǫ"
打印。éäìǫ
当然,如果源字符串在一个系统中编码,然后在具有不同语言环境的系统中解码,那么您很可能会得到一个Mojibake字符串。那不是base64要解决的问题,而是要通过改变字符串的编码来解决的问题。可能与
iconv
.但是,在带有 iso889-5 的西里尔文语言环境中(可能是 ru_RU.ISO-8859-5,还有其他带有西里尔文的语言):