1

为什么 Perl MIME::Base64 模块在解码 Base64 编码的字符串时在原始数据中不存在 LF 字符时在它们之前插入 CR 字符?

输入:由以下十六进制字符串描述的二进制文件,

14 15 6A 48 E4 15 6A 32 E5 48 46 13 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 45 E1 35E 8E 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 E1E 35 46 54 44

请注意以粗体显示的十六进制数字,突出显示在原始数据中不存在的“0A”之前插入的附加“0D”字符。

我在 Windows 7 上使用 Perl v5.14.2。

4

1 回答 1

1

由于您使用的是 Windows,因此您需要以二进制模式打开该文件句柄,以防止您的行尾被修改。

open FH, ">test.bin" or die $!;
binmode FH;

您可以使用 IO 层一次完成所有操作,也可以使用词法文件句柄,这比包符号更好,例如FH

open my $fh, '>:raw', 'test.bin' or die $!;
print { $fh } $bin;

有关更多信息,请查看

于 2013-05-28T13:20:29.957 回答