如何从Perl中将文件保存为UTF-8?

如何从Perl中将文件保存为UTF-8?,perl,utf-8,Perl,Utf 8,我试图在UTF-8中用Perl创建/保存HTML文件,但到目前为止我所做的一切都不起作用。A说要使用binmode,所以我试了一下。这是我的密码: open (OUT, ">$sectionfilename"); binmode(OUT, ":utf8"); print OUT $section; close OUT; 当我在记事本之类的文本编辑器中打开这些文件时,它们仍然是ANSI编码。我做错了什么?似乎适合我: C:\Documents and Settings>cat a.p

我试图在UTF-8中用Perl创建/保存HTML文件,但到目前为止我所做的一切都不起作用。A说要使用binmode,所以我试了一下。这是我的密码:

open (OUT, ">$sectionfilename");
binmode(OUT, ":utf8");
print OUT $section;
close OUT;
当我在记事本之类的文本编辑器中打开这些文件时,它们仍然是ANSI编码。我做错了什么?

似乎适合我:

C:\Documents and Settings>cat a.pl
$sectionfilename = "a.txt";
$section = "Hello \x{263A}!\n";

open (OUT, ">$sectionfilename");
binmode(OUT, ":utf8");
print OUT $section;
close OUT;    

C:\Documents and Settings>perl a.pl

C:\Documents and Settings>file a.txt
a.txt: UTF-8 Unicode text, with CRLF line terminators
但当我更改要写入的文本时:

$section = "Hello";
并运行:

C:\Documents and Settings>perl a.pl

C:\Documents and Settings>file a.txt
a.txt: ASCII text, with no line terminators

文本编辑器对于检查诸如编码之类的低级事物来说是一个糟糕的工具。改用hexviewer/hexdumper。编写示例的现代方法:

use autodie qw(:all);
open my $out, '>:encoding(UTF-8)', $sectionfilename;
print {$out} $section;
close $out;

启用自动错误检查。

您想要一个BOM表(字节顺序标记)?您的意思是专用记事本吗?因为记事本在没有BOM表的情况下无法识别UTF-8。不,不完全是记事本,也包括TextPad。该文件只是没有编码为UTF-8。