URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 7479
[ Назад ]

Исходное сообщение
"Windows, cp1251 и прочие ништяки"

Отправлено localhorst , 03-Мрт-12 00:06 
Что-то у меня случился затык.
Я пытаюсь делать так:

~~~~~~~
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 -v

This is perl 5, version 14, subversion 2 (v5.14.2) built for MSWin32-x86-multi-t
hread

Copyright 1987-2011, Larry Wall

Умные люди, подскажите, где я неправ?


Содержание

Сообщения в этом обсуждении
"Windows, cp1251 и прочие ништяки"
Отправлено cirus , 03-Мрт-12 03:01 
А что не нравится?



"Windows, cp1251 и прочие ништяки"
Отправлено Square , 03-Мрт-12 11:55 
> А что не нравится?

очевидно автоматическая конвертация русских букв вот в это:
    'Title' => "\x{412}\x{435}\x{440}\x{441}\x{438}\x{44f}"


"Windows, cp1251 и прочие ништяки"
Отправлено Pahanivo , 05-Мрт-12 08:28 
нашел старый скрипт в котором разбирал кириллицу, там вот такое в юзах:

use locale; use POSIX qw(locale_h); setlocale(LC_CTYPE,"ru_RU.CP1251");

может поможет ...


"Windows, cp1251 и прочие ништяки"
Отправлено cirus , 30-Мрт-12 23:23 
Вообще, Dumper + utf8 + внешний файл - это гремучая смесь. Настоятельно рекомендую не использовать Dumper.

А мультибайтовой кодировке в 5.14 недавно удивлялись на Точке: http://xpoint.ru/forums/programming/perl/regexp/thread/45820...