2013-10-29 78 views
1

是否可以使用基本Perl將Base64字符串轉換爲二進制文件(即標準版本中的軟件包,沒有來自CPAN的第三方庫)?如果是這樣,怎麼樣?如何使用Perl將Base64字符串轉換爲二進制

我遇到了模塊MIME :: Base64,它似乎從純文本 - > Base64和Base64->純文本轉換,但我似乎無法找到任何從Base64到二進制文件。

----- -----編輯

有可能我的二進制文件的概念被混淆。本質。我有一個Base64字符串通過HTML表單域傳遞。我想將該字符串轉換爲所需的任何格式,以便將該文件下載到用戶的瀏覽器。

從我的理解。如果我首先打印正確的MIME類型標題,然後打印應該工作的原始文件數據。

回答

4

你有它向後。像編碼一樣,MIME::Base64只處理字節。如果您解碼了文本,則必須先對其進行編碼。

這表明它能夠處理任意字節的能力:

use MIME::Base64 qw(decode_base64 encode_base64); 
my $expected = join '', map chr, 0x00..0xFF; 
my $base64 = encode_base64($expected); 
print($base64); 
my $got = decode_base64($base64); 
print($got eq $expected ? "ok" : "error", "\n"); 

AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4 
OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3Bx 
cnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmq 
q6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj 
5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w== 
ok 

這表明它無法處理文本尚未首先被編碼成字節:

use MIME::Base64 qw(encode_base64); 
encode_base64("\x{2660}"); 
print("ok\n"); 

Wide character in subroutine entry at a.pl line 2. 
+0

感謝您的快速回復@ikegami!我仍然有點困惑。如果我有一個base64編碼的字符串(我們稱之爲$ zipfile),那麼我會如何將$ zipfile轉換爲二進制文件? –

+0

@Max Hartshorn,「binary」意思是「可以包含/處理任意字節」。你不能轉換爲二進制,因爲二進制不是格式。無論如何,你只需要'decode_base64($ zipfile)'。 – ikegami

+0

工作正常!我現在感覺很傻。所以基本上,decode_base64將base64字符串解碼爲其原始未編碼字節序列。如果該序列最初是一段文本,那麼它將被解碼爲一段文本。如果它最初是一個文件,那麼它會解碼迴文件。再次感謝。 –

相關問題