Perl MIME::Tools-CRLF更改为LF
我使用MIME::parse解析多部分MIME。我想要完整的部分,不仅仅是头部或身体。据我所知,它将CRLF更改为LF。这是个问题Perl MIME::Tools-CRLF更改为LF,perl,mime,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 =
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,行分隔符是CRLFs(0x0d 0x0a)。
如果我检查打印输出,则它们将更改为LFs(0x0a)
为什么呢?如何获取原始内容
谢谢!
Chris您的问题缺少有关您解码的数据外观的重要信息。但我将假设这些文件要么具有显式给定的内容类型
text/plain
,要么具有隐式给定的内容类型(即未给出内容类型标题)text/plain
表示ASCII数据(除非定义了charset
头),行尾将特定于提取数据的环境使用:这表示Windows上的CRLF,Linux、MacOS和其他UNIX或类似UNIX的系统上的LF。邮件中的原始行结尾是什么并不重要,重要的是目标环境中使用的行结尾
如果您确实希望原始行结束,则应将内容声明为二进制(即内容类型
application/octet stream
或类似内容,但绝对没有text/*
),并且需要使用适合二进制数据的内容传输编码(即base64)对数据进行编码。您是否在Windows系统上?如果是,请尝试binmode F在读取文件之前,使用code>禁用Perl在Windows上使用的默认:crlf
层。请参阅和。最好使用三个参数,词法文件句柄,尤其是错误检查:openmyfh,'