Perl MIME :: Tools - CRLF更改为LF

时间:2018-03-14 20:55:32

标签: perl mime

我使用MIME :: Parse解析多部分MIME。我想拥有完整的部分,不仅仅是头部或身体。到目前为止,我看到它将CRLF更改为LF。这是一个问题。

use MIME::Parser;

my $parser = new MIME::Parser ();
$parser->decode_headers (0);
$parser->decode_bodies (0);
$parser->output_to_core (1);

open (F, "myfile.txt");
my $mime = $parser->parse (\*F);
close (F);

my $mp = $mime->parts (0);  // get the 1st part

my $ct = $mp->as_string (); 

my $h = unpack ("H*", $ct);
$h = join (' ', $h =~ /(..)/g); 
print "\n$h\n";            // inspect and compare with myfile.txt in a hex-editor

如果我使用十六进制编辑器查看myfile.txt行 - 分隔符是CRLF(0x0d 0x0a)。 如果我检查打印输出,则它们会更改为LF(0x0a)。

为什么?我怎样才能获得原始内容?

谢谢! 克里斯

1 个答案:

答案 0 :(得分:-1)

您的问题是缺少有关您解码数据的重要信息。但我会假设它们要么具有明确给定的内容类型text/plain,要么隐式具有此内容类型(即没有给出内容类型标题)。 text/plain表示ASCII数据(除非定义了charset标头),并且将使用特定于提取数据的环境的行结束:这意味着Windows上的CRLF和Linux,MacOS和其他UNIX上的LF或类UNIX系统。邮件内部的原始行是什么并不重要,所有重要的是目标环境中使用的行结尾。

如果你真的想让原始行结束,那么内容应该被声明为二进制(即内容类型application/octet-stream或类似,但绝对没有text/*)并且数据需要被编码使用适合二进制数据的内容传输编码,即base64。