Я пытаюсь создать/сохранить файлы HTML в Perl в UTF-8, но ничто я сделал до сих пор работы. Предыдущий ответ здесь на ТАК сказанном для использования 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;
autodie включает автоматическую проверку ошибок.