[英]How can I output a UTF-8 encoded XML file with unix line-endings from ActivePerl on Windows?
我在WinXP上運行ActivePerl 5.8.8。 我想輸出一個帶有UNIX行結尾的UTF-8 XML文件。
我查看了binmode
的perldoc,但我不確定確切的語法(如果我沒有咆哮錯誤的樹)。 以下不這樣做(原諒我的Perl - 這是一個學習過程!):
sub SaveFile
{
my($FileName, $Contents) = @_;
my $File = "SAVE";
unless( open($File, ">:utf-8 :unix", $FileName) )
{
die("Cannot open $FileName");
}
print $File @$Contents;
close($File);
}
如果$ Contents還沒有\\n
字符, print
將不會為您添加它們。 你必須自己做。
還有一些其他問題可能會有問題; 這是如何解決它們以及為什么。
要啟用utf8輸出,您需要使用:utf8
,而不是:utf-8
。 此外,您的IO層中不應有空格,因此它應該看起來像“”>:utf8:unix“。
要open
文件,您可以在線聲明'my $ fh'; 無需將其初始化為字符串即可啟動。 沒關系,這是一個很好的做法。 此外,使用or
捕獲開放錯誤的首選方法。
改變了,你的代碼現在看起來像這樣:
sub SaveFile
{
my($FileName, $Contents) = @_;
open my $File, ">:utf8:unix", $FileName
or die "Cannot open $FileName";
print $File map { "$_\n" } @$Contents;
close($File);
}
map允許您通過在打印它們之前將換行添加到每行來轉換輸入數組,並按順序執行。
祝好運!
我想你需要這樣的東西。
use strict;
use warnings;
sub save_file {
my ($file_name, $content) = @_;
open my $fh, ">", $file_name or die $!;
binmode $fh, ':utf8 :unix';
print $fh @$content;
close $fh;
}
# For example.
save_file('foo.txt', [ map "$_\n", qw(foo bar baz)]);
對於3參數形式的open
典型使用,您希望在調用open
之前未定義文件句柄變量。 有關詳細信息,請參閱文檔 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.