为什么解码Base64编码字符串的Perl MIME :: Base64模块在原始数据中不存在LF字符之前插入CR字符?
输入:由以下十六进制字符串
描述的二进制文件14 15 6A 48 E4 15 6A 32 E5 48 46 A A5 E3 88 43 18 A6 84 E3 51 3A 8A 0A 1A 3E E6 84 A6 1A 16 E8 46 84 A1 2E A3 5E 84 8A 4E 1A 35 E1 35 1E 84 A9 8E 46 54 44
这编码为Base64编码的字符串:
FBVqSOQVajLlSEYTpeOIQximhONROooKGj7mhKYaFuhGhKEuo16Eik4aNeE1HoSpjkZURA ==
我的用于解码的Perl脚本是
use MIME::Base64;
my $bin = decode_base64('FBVqSOQVajLlSEYTpeOIQximhONROooKGj7mhKYaFuhGhKEuo16Eik4aNeE1HoSpjkZURA==');
open FH, ">test.bin" or die $!;
print FH $bin;
close FH;
输出:生成的文件'test.bin'具有以下十六进制字符串表示,
14 15 6A 48 E4 15 6A 32 E5 48 46 13 A5 E3 88 43 18 A6 84 E3 51 3A 8A 0D 0A 1A 3E E6 84 A6 1A 16 E8 46 84 A1 2E A3 5E 84 8A 4E 1A 35 E1 35 1E 84 A9 8E 46 54 44
请注意以粗体显示的十六进制数字,突出显示在原始数据中不存在的“0A”之前插入的附加“0D”字符。
我在Windows 7上使用Perl v5.14.2。
答案 0 :(得分:1)
由于您使用的是Windows,因此您需要以二进制模式打开该文件句柄,以防止您的行结束被滥用。
open FH, ">test.bin" or die $!;
binmode FH;
您可以使用IO图层同时执行所有操作,也可以使用词法文件句柄,这比FH
这样的包符号更好:
open my $fh, '>:raw', 'test.bin' or die $!;
print { $fh } $bin;
了解更多信息,请查看