Forum Webscript.Ru
Программирование => Perl => Тема начата: Skif от 03 Мая 2005, 03:39:55
-
вот надыбал понравившийся мне модуль, но получил маленький облом.
Модуль Lingua::DetectCharset;
А вот проблемы(покажу на простеньком скрипте):
.....
use Lingua::DetectCharset;
use LWP::Simple;
$str=get("http://server.com.ua");
my $charset = Lingua::DetectCharset::Detect ($str) ;
По идее проблем быть не должно. Но идея великая вещь:
Use of uninitialized value in addition (+) at /usr/local/lib/perl5/site_perl/5.8.5/Lingua/DetectCharset.pm line 85.
Use of uninitialized value in addition (+) at /usr/local/lib/perl5/site_perl/5.8.5/Lingua/DetectCharset.pm line 85.
Use of uninitialized value in addition (+) at /usr/local/lib/perl5/site_perl/5.8.5/Lingua/DetectCharset.pm line 39.
Use of uninitialized value in addition (+) at /usr/local/lib/perl5/site_perl/5.8.5/Lingua/DetectCharset.pm line 40.
Use of uninitialized value in division (/) at /usr/local/lib/perl5/site_perl/5.8.5/Lingua/DetectCharset.pm line 41.
Это малая часть того, что мне выплевываетсся в консоль при запуске скрипта. :(
Ставил модуль при помощи
perl -CPAN -e \'install Lingua::DetectCharset\'
Сам модуль как бы поставился. То есть ошибок не было. А вот эффект - нулевой. Может я не правильно читаю маны и хелпы? Пните, пожалуйста
P.S.: чуть не забыл - ось FreeBSD, может это актуально
-
А может есть альтернатива данному модулю? Вот ковыряюсь пока. Единственная полумера - отпарсить кодировку в заголовках html страницы. Но она мне не сильно нраиться- много левого всего писать. Да и потом, мне необходимо перекодировать все в нужную мне koi8r
-
Да просто программеры переборщили с изяществом и лаконичностью кода. Бага тут:
my ($Mark, $i);
for (@Data) {
s/[\\n\\r]//go;
$_ = Convert::Cyrillic::toLower ($_, $Code);
for (split (/[\\.\\,\\-\\s\\:\\;\\?\\!\\\'\\"\\(\\)\\d<>]+/o)) {
for $i (0..length ()-$PairSize) {
$Mark += ${$Table} {substr ($_, $i, $PairSize)};
}
}
}
$Mark;
Это файл /usr/local/lib/perl5/site_perl/5.8.2/Lingua/DetectCharset.pm
со строки 85. Как его изменить чтоб все работало нормально я так и не догнал. Суть здесь в замене содержимого по Таблице, при этом замена идет букв по парам, типа "ЧА" - заменяется на 2 и т.п. Таблица соответствий содержится в ссылке на хэш $Table, здесь как видите происходит какое-то убогое разыменовывание ( ${$Table} {substr ($_, $i, $PairSize)}) логичней было бы так:
$Table->{substr ($_, $i, $PairSize)}. Но это не решает проблемы.
Короче - тут надо сообща подумать.
-
:)
Я до этого в принципе сам додумался - ничего другого не оставалось, как разгребать на скорую код. Но в лоб тоже не удалось решить. Решил, что руки кривые. Но так как времени ковыряться особо не было - горит проект, приходиться прыгать...
В общем сейчсас просто пытаюсь по своим таблицам перекодировать, а кодировку выхватываю у сервера. Вот только иногда абракадабра получается, когда не верно сформированы заголовки. Точнее их полное отсутствие на html страничке и сервер выдает свою кодировку по дефаулту, а содержимое в совершенно другой... :( (koi8r - cp1251 - а такое почти повсеместно).