Как сохранить файл как UTF-8 из Perl? - PullRequest
10 голосов
/ 26 февраля 2010

Я пытаюсь создать / сохранить HTML-файлы в Perl в UTF-8, но пока ничего, что я сделал, не работает. предыдущий ответ здесь на SO сказал использовать binmode, так что я попробовал это. Вот мой код:

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

Когда я открываю эти файлы в текстовом редакторе, таком как Блокнот, они все еще находятся в кодировке ANSI. Что я делаю не так?

Ответы [ 2 ]

14 голосов
/ 26 февраля 2010

Текстовый редактор - плохой инструмент для изучения низкоуровневых вещей, таких как кодировки. Вместо этого используйте hexviewer / hexdumper. Современный способ написать ваш пример:

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

autodie включает автоматическую проверку ошибок.

3 голосов
/ 26 февраля 2010

Кажется, работает для меня:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...