$ perl -MMIME::Base64 -e 'print encode_base64("syn_ack@163.com");'
c3luX2Fjay5jb20=
$ perl -MMIME::Base64 -e 'print decode_base64("c3luX2Fjay5jb20=");'
syn_ack.com
编码结果无法解码为原始字符串,为什么?
答案 0 :(得分:2)
您必须将@
转义为\@
或使用不同的引号。
这是因为双引号被展开,@163
被视为数组@163
(即使此名称不是有效的标识符)。
这可以按预期工作:
perl -MMIME::Base64 -e "print encode_base64('syn_ack@163.com');"
c3luX2Fja0AxNjMuY29t
perl -MMIME::Base64 -e 'print encode_base64("syn_ack\@163.com");'
c3luX2Fja0AxNjMuY29t
perl -MMIME::Base64 -e "print decode_base64('c3luX2Fja0AxNjMuY29t');"
syn_ack@163.com
答案 1 :(得分:1)
切换报价。 Perl将在使用双引号时插入变量。
$ perl -MMIME::Base64 -e "print encode_base64('syn_ack@163.com');"
c3luX2Fja0AxNjMuY29t
$ perl -MMIME::Base64 -e "print decode_base64('c3luX2Fja0AxNjMuY29t');"
syn_ack@163.com
答案 2 :(得分:1)
当您使用Perl看到意外结果时,请确保已启用警告。
$ perl -w -MMIME::Base64 -e 'print encode_base64("syn_ack@163.com");' Possible unintended interpolation of @163 in string at -e line 1. c3luX2Fjay5jb20=
单引号(''
)字符串中没有插值,因此您可以运行
perl -w -MMIME::Base64 -e 'print encode_base64('syn_ack@163.com');'
或保留双引号(""
)并转义@
perl -w -MMIME::Base64 -e 'print encode_base64("syn_ack\@163.com");'
输出
c3luX2Fja0AxNjMuY29t
解码给出了
$ perl -w -MMIME::Base64 -e 'print decode_base64("c3luX2Fja0AxNjMuY29t");' syn_ack@163.com