在Windows中显示的换行符

时间:2016-02-08 04:08:58

标签: windows perl newline

open OUT, ">output.txt";
print OUT "Hello\nWorld";

当我在Unix系统中运行上述perl代码然后将output.txt传输到Windows并在记事本中打开它时显示为:

  

的HelloWorld

要在Windows中正确显示换行符,我需要做什么?

4 个答案:

答案 0 :(得分:3)

文本文件行结尾是特定于平台的。如果您要创建适用于Windows平台的文件,则应使用

ClassB

然后你可以

open OUT, '>:crlf', 'output.txt' or die $!;

正常

print OUT "Hello\nworld!\n"; PerlIO层是为Windows构建的Perl可执行文件的默认层,因此您无需将其添加到将为其预期平台创建文件的代码中。对于便携式软件,您可以通过检查内置变量:crlf

来检查主机系统

答案 1 :(得分:1)

Windows使用回车符+换行符:

print OUT "Hello\r\nWorld";

答案 2 :(得分:0)

我编写了File::Edit::Portable模块来消除这些问题。虽然您可以使用它来编写(以及许多其他内容),但在这种情况下您只需要read()功能。

安装模块,并在脚本顶部添加:

use File::Edit::Portable;

打开/阅读文件时,您可以这样做:

my $rw = File::Edit::Portable->new;

my $fh = $rw->read('file.txt');

无论行结尾是什么或者您使用什么平台,它都会在后台完成所有跨平台工作,因此您不必这样做。这样,你可以在任何系统上打开文件,无论你决定使用什么行结尾,它都可以正常工作。

答案 3 :(得分:0)

换行符处理是编辑器特定的(有许多答案声称它是特定于操作系统的,但在现实生活中,通常不是真的)。但是,在DOSish系统中,长期以来的惯例是使用CRLF来表示EOL(另见Why is fwrite writing more than I tell it to?

如果您尝试在除记事本之外的任何其他编辑器中打开此文件,您会注意到文本在两行中正确显示,状态栏中的指示符或在Unix模式下打开文件的其他位置或LF模式。

除非您打算仅使用记事本查看文件,否则您无需担心。 Windows上的其他工具都可以处理它。

但是,记事本确实希望CRLF序列标记每行的结尾。如果您确实想要满足它,那么您可以输出"\r\n",如@kizeloo建议的那样。我更愿意在必要时使用output layers

请注意,如果您尝试使用需要单个LF来表示EOL的编辑器来查看此类文件,您可能会看到^M或其他表示CR的字符。