Perl code Сохранить XML-файл формата кодировки ANSI в кодировке UTF-8 - PullRequest
1 голос
/ 15 марта 2011

Мне нужно изменить формат кодировки файла с ANSI на UTF-8 ... Пожалуйста, предложите мне завершить это, я сделал с помощью некоторых методов. Но это не сработало. При этом я написал код, который я сделал.

use utf8;
use File::Slurp;

$File_Name="c:\\test.xml";
$file_con=read_file($File_Name);

open (OUT, ">c:\\b.xml");
binmode(OUT, ":utf8");
print OUT $file_con;
close OUT;

Ответы [ 3 ]

1 голос
/ 15 марта 2011

Если у вас есть действительный XML-файл, это будет сделано:

use XML::LibXML qw( );

my $doc = XML::LibXML->new()->parse_file('text.xml');
$doc->setEncoding('UTF-8');

open(my $fh, '>:raw', 'test.utf8.xml')
   or die("Can't create test.utf8.xml: $!\n");
print($fh $doc->toString());

Это обрабатывает как преобразование кодировки, так и настройку директивы <?xml?>. Предыдущие ответы оставили неправильную кодировку в директиве <?xml?>.

0 голосов
/ 15 марта 2011

Если вы просто хотите сделать фильтр, попробуйте это:

perl -MEncode -pwe 's/(.*)/encode('utf8', $1)/e;'

Например:

type c:\text.xml |perl -MEncode -pwe 's/(.*)/encode('utf8', $1)/e;' >c:\b.xml

Или изменив свой код:

use File::Slurp;
use Encode;

$File_Name="c:\\test.xml";
$file_con=read_file($File_Name);

open (OUT, ">c:\\b.xml");
print OUT encode('utf8', $file_con);
close OUT;
0 голосов
/ 15 марта 2011

Используйте Text::Iconv:

use Text::Iconv;
$converter = Text::Iconv->new("cp1252", "utf-8");
$converted = $converter->convert($file_con);

(при условии, что вы используете кодовую страницу 1252 в качестве кодовой страницы по умолчанию).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...