我有用Perl创建的base64编码数据,使用MIME::Base64
和encode_base64($data)
。
其结果是 :ahX/OxLY/BBR4Wy+n+a3Mg==
当我在Perl中解码时,我得到了j?;??Q?l???2
.如果我把它写到一个文件中,它看起来像这样:jˇ;ÿ¸Q·læüÊ∑2
但是,当我尝试使用相同的base64编码数据并使用python解码时base64.b64decode(data), I get:
b'j\x15\xff;\x12\xd8\xfc\x10Q\xe1l\xbe\x9f\xe6\xb72''
如果我将其解码为latin1
,结果更接近:'jx15ÿ;x12Øüx10Qál¾x9fæ·2'
,但我需要完全相同的数据。
如何从 python 获得完全相同的输出?我错过了什么?
(Perl$data
本身据说是用随机read(DEV,$data,16);
生成的。
在Perl和Python中,你已经有相同的字符串。
$ perl -e'
use MIME::Base64 qw( encode_base64 );
my $raw = "x6Ax15xFFx3Bx12xD8xFCx10x51xE1x6CxBEx9FxE6xB7x32";
CORE::say encode_base64($raw, "");
'
ahX/OxLY/BBR4Wy+n+a3Mg==
$ python3 <<__END_OF_PROG__
import base64
encoded = "ahX/OxLY/BBR4Wy+n+a3Mg==";
expected = b"x6Ax15xFFx3Bx12xD8xFCx10x51xE1x6CxBEx9FxE6xB7x32";
raw = base64.b64decode(encoded)
print(raw == expected)
__END_OF_PROG__
True
那是因为base64.b64decode(data)
没有生产
b'jx15xff;x12xd8xfcx10Qxe1lxbex9fxe6xb72'
它生成的是由该 Python 字符串文本生成的字符串,该字符串由以下 16 个字节(十六进制(组成:
6A 15 FF 3B 12 D8 FC 10 51 E1 6C BE 9F E6 B7 32
这就是你在Perl中用来产生ahX/OxLY/BBR4Wy+n+a3Mg==
的字符串。