簡體   English   中英

為什么在原始數據中不存在解碼Base64編碼的字符串時,Perl MIME :: Base64在CR字符之前在CR字符之前插入CR字符?

[英]Why does Perl MIME::Base64 insert CR characters before LF characters on decoding Base64-encoded strings when they aren't present in the original data?

為什么在解碼Base64編碼的字符串時,Perl MIME :: Base64模塊在原始數據中不存在CR字符時將CR字符插入到LF字符之前?

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

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 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。

由於您使用的是Windows,因此您需要以二進制模式打開該文件句柄,以防止行尾受到干擾。

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

您可以使用IO層一次完成所有操作,還可以使用詞法文件句柄(比FH這樣的包符號更好的做法):

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

有關更多信息,請查看

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM