Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl MIME::Tools-CRLF更改为LF_Perl_Mime - Fatal编程技术网

Perl MIME::Tools-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 =

我使用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,行分隔符是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禁用Perl在Windows上使用的默认
:crlf
层。请参阅和。最好使用三个参数,词法文件句柄,尤其是错误检查:
openmyfh,'