MIME::Base64 - 对 base64 字符串进行编码和解码
use MIME::Base64;
$encoded = encode_base64('Aladdin:open sesame');
$decoded = decode_base64($encoded);
此模块提供函数,用于对字符串进行编码和解码,编码和解码方式为 RFC 2045 - MIME(多用途互联网邮件扩展)中指定的 base64 编码。base64 编码旨在以无需人工可读的形式表示任意八位字节序列。使用 65 个字符的 US-ASCII 子集([A-Za-z0-9+/=]),每个可打印字符可表示 6 位。
提供以下主要函数
通过调用 encode_base64() 函数对数据进行编码。第一个参数是要编码的字节字符串。第二个参数是要使用的行结束序列。它是可选的,默认为“\n”。返回的编码字符串被分成每行不超过 76 个字符,并且它将以 $eol 结尾,除非它是空的。如果您不希望将编码字符串分成多行,请将空字符串作为第二个参数传递。
如果 $bytes 包含代码高于 255 的字符,则该函数将以“子例程入口中的宽字符”崩溃。base64 编码仅针对单字节字符定义。使用 Encode 模块选择所需的字节编码。
通过调用 decode_base64() 函数对 base64 字符串进行解码。此函数接受一个参数,即要解码的字符串,并返回解码后的数据。
任何不属于 65 个字符 base64 子集的字符都会被忽略。在 '=' 填充字符之后出现的字符永远不会被解码。
如果您不想将这些例程导入到您的命名空间中,您可以将它们称为
use MIME::Base64 ();
$encoded = MIME::Base64::encode($decoded);
$decoded = MIME::Base64::decode($encoded);
默认情况下不导出的附加函数
根据“URL 应用程序”[1] 的 base64 方案进行编码和解码。这是 base64 编码的一个变体,它不使用填充,不会将字符串分成多行,并使用字符“-”和“_”代替“+”和“/”以避免使用保留的 URL 字符。
返回编码字符串在未实际编码时的长度。这将返回与 length(encode_base64($bytes))
相同的值,但应该更高效。
返回解码后的字符串的长度,而无需实际解码它。这将返回与 length(decode_base64($str))
相同的值,但效率应该更高。
如果您想对一个大文件进行编码,您应该将它编码成 57 字节的倍数的块。这确保了 base64 行对齐,并且您不会在中间结束填充。57 字节的数据填满了一整行 base64(76 == 57*4/3)
use MIME::Base64 qw(encode_base64);
open(FILE, "/var/log/wtmp") or die "$!";
while (read(FILE, $buf, 60*57)) {
print encode_base64($buf);
}
或者如果您知道您有足够的内存
use MIME::Base64 qw(encode_base64);
local($/) = undef; # slurp
print encode_base64(<STDIN>);
与命令行相同的方法
perl -MMIME::Base64 -0777 -ne 'print encode_base64($_)' <file
如果每行包含多个 base64 字符,则解码不需要 slurp 模式
perl -MMIME::Base64 -ne 'print decode_base64($_)' <file
Perl v5.8 及更高版本允许字符串中包含扩展 Unicode 字符。此类字符串不能直接编码,因为 base64 编码仅针对单字节字符定义。解决方案是使用 Encode 模块来选择您想要的字节编码。例如
use MIME::Base64 qw(encode_base64);
use Encode qw(encode);
$encoded = encode_base64(encode("UTF-8", "\x{FFFF}\n"));
print $encoded;
版权所有 1995-1999、2001-2004、2010 Gisle Aas。
此库是免费软件;您可以在与 Perl 本身相同的条款下重新分发或修改它。
远程基于 Martijn Koster <[email protected]> 和 Joerg Reichelt <[email protected]> 编写的 LWP::Base64 以及 Hans Mulder <[email protected]> 发布到 comp.lang.perl <[email protected]> 的代码。
XS 实现使用了来自 metamail 的代码。版权所有 1991 Bell Communications Research, Inc. (Bellcore)