open OUT, ">output.txt";
print OUT "Hello\nWorld";
当我在Unix系统中运行上述perl代码然后将output.txt
传输到Windows并在记事本中打开它时显示为:
的HelloWorld
要在Windows中正确显示换行符,我需要做什么?
答案 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的字符。