簡體   English   中英

如何在Windows上從ActivePerl輸出帶有unix行結尾的UTF-8編碼XML文件?

[英]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將不會為您添加它們。 你必須自己做。

還有一些其他問題可能會有問題; 這是如何解決它們以及為什么。

IO層

要啟用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM