Perl > проблема с кодировкой UTF-8

[Удален]
1095

приветствую.

Проблема в том что:

Perl скрипт парсит сайт, на котором пытается найти текст ссылки.

Когда сервер выдает charset=windows-1251 то все четко, но когда charset=UTF-8

то выводит абракадабру - типа "кондиционеры".

Как с этим бороться?

DI
На сайте с 03.01.2007
Offline
123
#1

перекодировать данные из utf в cp1251

Например:


function utf8win1251($s){
$out = $c1 = "";
$byte2=false;
for ($c=0;$c<strlen($s);$c++){
$i=ord($s[$c]);
if ($i<=127) $out.=$s[$c];
if ($byte2){
$new_c2=($c1&3)*64+($i&63);
$new_c1=($c1>>2)&5;
$new_i=$new_c1*256+$new_c2;
if ($new_i==1025){
$out_i=168;
}
else{
if ($new_i==1105){
$out_i=184;
}
else {
$out_i=$new_i-848;
}
}
$out.=chr($out_i);
$byte2=false;
}
if (($i>>5)==6) {
$c1=$i;
$byte2=true;
}
}
return $out;
}
Высказывание идиотского утверждения требует на порядок меньше усилий, чем его последовательное и обоснованное опровержение и более того, иногда это опровержение вообще невозможно. © (http://zhurnal.lib.ru/s/shapiro_m_a/raspidiota.shtml)
[Удален]
#2
DenIT:
перекодировать данные из utf в cp1251
Например:

function utf8win1251($s){
$out = $c1 = "";
...

Спасибо, но должно же быть подобное на Perl'e, может модуль какой нибудь?

Small_Forward
На сайте с 02.03.2006
Offline
32
#3
-(Oo)-:
...Как с этим бороться?

на Perl-е попробуйте примерно так:

use Encode;

print encode("cp1251",decode("utf8", "кондиционеры"));

С уважением, Игорь
DI
На сайте с 03.01.2007
Offline
123
#4

блин, не заметил про перл:)

например, iconv

[Удален]
#5
Small_Forward:
на Perl-е попробуйте примерно так:

use Encode;
print encode("cp1251",decode("utf8", "кондиционеры"));

Вот спасибо!!! :)

очень благодарен.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий