【问题标题】:How can I convert a Base64 string to binary using Perl如何使用 Perl 将 Base64 字符串转换为二进制
【发布时间】:2013-10-29 17:10:35
【问题描述】:

是否可以获取 Base64 字符串并使用基本 Perl 将其转换为二进制(即仅标准版本中的包,没有来自 CPAN 的第 3 方库)?如果有,怎么做?

我遇到了模块 MIME::Base64,它似乎从纯文本->Base64 和 Base64->纯文本转换,但我似乎找不到从 Base64 到二进制的任何内容。

-----编辑-----

我对二进制的概念可能很混乱。本质上。我有一个通过 HTML 表单字段传递的 Base64 字符串。我想将该字符串转换为任何必要的格式,以便将该文件下载到用户的浏览器。

据我了解。如果我首先打印正确的 MIME 类型标题,然后打印应该可以工作的原始文件数据。

【问题讨论】:

    标签: perl binary base64


    【解决方案1】:

    你有它倒退。 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.
    

    【讨论】:

    • 感谢您的快速回复@ikegami!我还是有点困惑。如果我有一个 base64 编码的字符串(我们称之为 $zipfile),我将如何将 $zipfile 转换为二进制文件?
    • @Max Hartshorn,“二进制”仅表示“可以包含/处理任意字节”。您不能转换为二进制,因为二进制不是一种格式。无论如何,你只需要decode_base64($zipfile)
    • 行得通!我现在觉得有点傻。所以本质上 decode_base64 将 base64 字符串解码为其原始未编码的字节序列。如果该序列最初是一段文本,那么它将被解码回一段文本。如果它最初是一个文件,那么它会被解码回一个文件。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 2010-11-10
    • 2012-09-01
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    相关资源
    最近更新 更多