Что-то у меня случился затык.
Я пытаюсь делать так:~~~~~~~
use XML::Simple;
use Cwd;
use Data::Dumper;
my $pwd = cwd; # get current directory
my $filename = 'Report.xml';open my $output, '>', "$pwd/Out.txt";
open my $file, '<', $filename or die "Unable to open file ($pwd/$filename): $!\n";
my $xml = eval { XMLin($file) };
if ($@) {
die "Error while parsing xml file ($filename): $@\n";
}
print $output Dumper($xml);
close $file;
close $output;
~~~~~~~Начало XMLки выглядит так:
~~~~~~~
<?xml version="1.0" encoding="Windows-1251"?>
<Report><Lang>ru</Lang>
<Page><Title>Отчёт</Title><Icon>112</Icon>
<Item><Title>Версия</Title><Icon>112</Icon><ID>257</ID><Value>AIDA64 v1.70.1400/ru</Value></Item>
~~~~~~~Файл в cp1251, проверял нотпадом++.
Однако в Out.txt получается так:
~~~~~~~
VAR1 = {
'Lang' => 'ru',
'Page' => [
{
'Item' => [
{
'ID' => '257',
'Value' => 'AIDA64 v1.70.1400/ru',
'Icon' => '112',
'Title' => "\x{412}\x{435}\x{440}\x{441}\x{438}\x{44f}"
},
~~~~~~~При этом нотпад++ говорит, что кодировка ANSI.
Грабли где-то в недрах винды, вот только какие и почему вообще - не ясно.
Код пишу в padre, сам перл такой:
C:\Users\Insane>perl -vThis is perl 5, version 14, subversion 2 (v5.14.2) built for MSWin32-x86-multi-t
hreadCopyright 1987-2011, Larry Wall
Умные люди, подскажите, где я неправ?
А что не нравится?
> А что не нравится?очевидно автоматическая конвертация русских букв вот в это:
'Title' => "\x{412}\x{435}\x{440}\x{441}\x{438}\x{44f}"
нашел старый скрипт в котором разбирал кириллицу, там вот такое в юзах:use locale; use POSIX qw(locale_h); setlocale(LC_CTYPE,"ru_RU.CP1251");
может поможет ...
Вообще, Dumper + utf8 + внешний файл - это гремучая смесь. Настоятельно рекомендую не использовать Dumper.А мультибайтовой кодировке в 5.14 недавно удивлялись на Точке: http://xpoint.ru/forums/programming/perl/regexp/thread/45820...