Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> xml+cp1251, проблемы с кодировкой 
:(
    Опции темы
popkorn
Дата 22.10.2006, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 9.12.2005

Репутация: нет
Всего: нет



беру xml здесь: http://www.cbr.ru/scripts/XML_daily.asp?date_req=
он в cp1251


Код

#!/usr/bin/perl

use XML::Simple;
$xml = XMLin('1.xml');
print $xml->{Valute}->[0]->{Name}


в ответ получаю строку в unicode, как получить в cp1251 ?



Это сообщение отредактировал(а) popkorn - 22.10.2006, 12:17
PM MAIL   Вверх
nitr
Дата 22.10.2006, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 12
Всего: 84



perldoc Encode

Код

...
use Encode qw(decode encode);
...
print encode('cp1251', decode('utf8', $xml->{Valute}->[0]->{Name}));
...


Добавлено @ 18:00 
как пример ;)


--------------------
PM   Вверх
popkorn
Дата 22.10.2006, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 9.12.2005

Репутация: нет
Всего: нет



nitr
а средствами XML::Simple нельзя перекодировать ?

даже не перекодировать, а что бы XML::Simple не изменял исходную кодировку документа smile



Это сообщение отредактировал(а) popkorn - 22.10.2006, 21:51
PM MAIL   Вверх
nitr
Дата 22.10.2006, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 12
Всего: 84



а почему решил, что выдаёт в юникоде?


--------------------
PM   Вверх
popkorn
Дата 24.10.2006, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 9.12.2005

Репутация: нет
Всего: нет



Цитата


а почему решил, что выдаёт в юникоде?



эм ну потому что запустил в консоли и получил на экран текст в юникоде smile
#perl 1.pl
абракатабра

#perl 1.pl > 1.txt && iconv -f utf8 -t cp1251 1.txt 
#cat 1.txt
нормальный текст 



smile
PM MAIL   Вверх
nitr
Дата 24.10.2006, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 12
Всего: 84



popkorn, ОСь? smile
я под виндой проверял smile файлик в cp1251 smile
Код

if($self->{opt}->{outputfile}) {
    if(ref($self->{opt}->{outputfile})) {
      my $fh = $self->{opt}->{outputfile};
      if(UNIVERSAL::isa($fh, 'GLOB') and !UNIVERSAL::can($fh, 'print')) {
        eval { require IO::Handle; };
        croak $@ if $@;
      }
      return($fh->print($xml));
    }
    else {
      local(*OUT);
      open(OUT, '>', "$self->{opt}->{outputfile}") ||
        croak "open($self->{opt}->{outputfile}): $!";
      binmode(OUT, ':utf8') if($] >= 5.008);
      print OUT $xml || croak "print: $!";
      close(OUT);
    }
  }

из этого кода многое понятно ;) , но так как ты хочешь...
используй XML::Parser, сложней, зато верней ;)

читаем тут smile
Код

Note: the current implementation of this option generates a string of XML
and uses a SAX parser to translate it into SAX events.  The normal encoding
rules apply here - your data must be UTF8 encoded unless you specify an 
alternative encoding via the 'XMLDecl' option; and by the time the data reaches
the handler object, it will be in UTF8 form regardless of the encoding you
supply.  A future implementation of this option may generate the events 
directly.



--------------------
PM   Вверх
djkostya
Дата 24.10.2006, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 16.5.2006
Где: Москва

Репутация: 1
Всего: 2



use Text::Iconv;
my $converter = Text::Iconv->new("utf8","cp1251");
my $result = $converter->convert("$text");


print "$result";

В скаляре $result будет текст в windows-1251

PM MAIL WWW ICQ   Вверх
nitr
Дата 24.10.2006, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 12
Всего: 84



djkostya, я уже приводил решение ;)
тут
но ему как-то по-другому хочется smile)
Цитата(popkorn @  22.10.2006,  21:32 Найти цитируемый пост)
nitr
а средствами XML::Simple нельзя перекодировать ?даже не перекодировать, а что бы XML::Simple не изменял исходную кодировку документа smile
Это сообщение отредактировал popkorn - 22.10.2006,  21:51



Это сообщение отредактировал(а) nitr - 24.10.2006, 12:13


--------------------
PM   Вверх
djkostya
Дата 24.10.2006, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 16.5.2006
Где: Москва

Репутация: 1
Всего: 2



Ну он же Iconv использовал для примера я ему и пример с Iconv написал
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0958 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.