Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Необрабатывается кириллица в запросе


Автор: bugmenot 10.7.2007, 18:40
Есть следующий код:
Код

#!/usr/bin/perl

use warnings;
use strict;
use Winamp::Control;
use Lyrics::Fetcher::LyricWiki;

    my $winamp = Winamp::Control->new( host => '127.0.0.1', port => 4800 );

    if( my $ver = $winamp->getversion )
    {
        my $str= $winamp->getcurrenttitle() if $winamp->isplaying();
        my ($artist, $song) = $str =~ /\.\s(.+?)\s-\s(.+)$/;
        print "$artist\n$song\n\n";
        print Lyrics::Fetcher::LyricWiki->fetch($artist, $song);
    }
    else
    {
        warn 'Unable to connect to winamp/httpQ';
    }

Если в переменные передается текст содержащий латинский шрифт - все работает, а если кириллица то нет.
Предполагаю что в модуле Lyrics::Fetcher::LyricWiki не предусмотрена работа с кириллицей, как можно попытаться решить проблему?

Автор: errr 10.7.2007, 19:55
А что не работает конкретно? Что пишет?

Автор: bugmenot 10.7.2007, 20:06
Конкретно нет вывода текста песни... скрипт ошибок не выдает, на сколько я понял просто не находит такую композицию и исполнителя т.к. запрос в кириллице криво обрабатывается.

Автор: KSURi 10.7.2007, 20:25
Должно помочь:
Код

use encoding 'cp1251';

Автор: bugmenot 11.7.2007, 17:48
Нет не помогает... это я первое что сделал )
пишет
Код

500 Wide character in syswrite at C:/Perl/site/lib/Lyrics/Fetcher/LyricWiki.pm line 33

ps: и use encoding 'utf8'; на всякий случай попробовал тоже не помогает

Автор: amg 12.7.2007, 08:20
Прагмы use encoding (и use utf8) здесь не помогут. Они для того, чтобы перл правильно понял текст скрипта, написанного в юникоде, и к данным отнощения не имеют. 
use Encode

Автор: bugmenot 12.7.2007, 20:02
Код

#!/usr/bin/perl

use warnings;
use strict;
use diagnostics;
use Encode 'decode', 'encode';
use Winamp::Control;
use Lyrics::Fetcher::LyricWiki;

    my $winamp = Winamp::Control->new( host => '127.0.0.1', port => 4800 );

    if( my $ver = $winamp->getversion )
    {
        my $str= $winamp->getcurrenttitle() if $winamp->isplaying();
        
        my ($artist, $song) = $str =~ /\.\s(.+?)\s-\s(.+)$/;
        my $artist_enc = encode('cp-1251', $artist);
        my $song_enc= encode('cp-1251', $song);
        print "$artist_enc\n$song_enc\n\n";
        print Lyrics::Fetcher::LyricWiki->fetch($artist_enc, $song_enc);
    }
    else
    {
        warn 'Unable to connect to winamp/httpQ';
    }


теперь выдает знаки вопроса из 
Код
print "$artist_enc\n$song_enc\n\n";


дальше по прежнему глухо.

Автор: shamber 12.7.2007, 23:22
bugmenot, а попробовать определить кодировку с помощью Cyrillic::CPdetect ?
Кстати к меня как-то тоже были проблемы с кодировкой и замена cp-1251 на cp-1252 помогала 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)