Xpoint
   [напомнить пароль]

Декодирование в cp1251 адреса поискового запроса Google?

Метки: [без меток]
2007-01-04 10:52:07 [обр] Владимир Клемято[досье]
Какую кодировку сейчас использует Google в строке поискового запроса? Каким модулем можно перекодировать адрес в cp1251?
Если можно, преведите простой пример.
спустя 6 часов [обр] Владимир Клемято[досье]

Спрошу иначе.
Что это за кодировка?

%D0%A1%D1%83%D0%BF%D0%B5%D1%80-%D0%BF%D1%83%D0%BF%D0%B5%D1%80+%D1%84%D0%BE%D1%80%D1%83%D0%BC

И как ее перекодировать в русскую windoшную cp1251?

спустя 35 минут [обр] Алексей В. Иванов(25/2861)[досье]
utf-8, используйте поиск
спустя 2 часа 46 минут [обр] arto(81/497)[досье]
# perl -MEncode=from_to -le '$_=$ARGV[0];s*%(..)*chr(hex($1))*ge;from_to($_,"utf8","koi8-r");print' "%D0%A1%D1%83%D0%BF%D0%B5%D1%80-%D0%BF%D1%83%D0%BF%D0%B5%D1%80+%D1%84%D0%BE%D1%80%D1%83%D0%BC"
Супер-пупер+форум
#
спустя 4 часа 35 минут [обр] Давид Мзареулян(5/1003)[досье]

Справедливости ради, гугл и другие кодировки тоже умеет:

http://www.google.com/search?q=%EF%EE%E8%F1%EA&ie=windows-1251

Так что в общем случае следует ориентироваться на параметр “ie”.

спустя 9 часов [обр] Владимир Клемято[досье]

arto[досье]
Если я правильно Вас понял:

$theURL = "%D0%A1%D1%83%D0%BF%D0%B5%D1%80-%D0%BF%D1%83%D0%BF%D0%B5%D1%80+%D1%84%D0%BE%D1%80%D1%83%D0%BC";
use Encode 'from_to'; 
$theURL =~ s*%(..)*chr(hex($1))*ge;
$theUR2 = from_to($theURL,"utf8","koi8-r");
print "$theURL";

Но в результате:
17
Почему?

спустя 1 час 20 минут [обр] arto(81/497)[досье]
  DB<1> $theURL = "%D0%A1%D1%83%D0%BF%D0%B5%D1%80-%D0%BF%D1%83%D0%BF%D0%B5%D1%80+%D1%84%D0%BE%D1%80%D1%83%D0%BC";
  DB<2> use Encode 'from_to';
  DB<3> $theURL =~ s*%(..)*chr(hex($1))*ge;
  DB<4> $theUR2 = from_to($theURL,"utf8","koi8-r");
  DB<5> print "$theURL";
Супер-пупер+форум
  DB<6>
спустя 2 часа 22 минуты [обр] Владимир Клемято[досье]

arto[досье]
Создаю .cgi файл, пишу код, но в результатае все равно получаю "17"?

#!/usr/local/bin/perl
use Encode 'from_to'; 
$theURL = "%D0%A1%D1%83%D0%BF%D0%B5%D1%80-%D0%BF%D1%83%D0%BF%D0%B5%D1%80+%D1%84%D0%BE%D1%80%D1%83%D0%BC";
$theURL =~ s*%(..)*chr(hex($1))*ge;
$theURL = from_to($theURL,"utf8","koi8-r");
print "$theURL";

В чем беда?

спустя 8 минут [обр] arto(81/497)[досье]
разница не видна?
DB<4> $theUR2 = from_to($theURL,"utf8","koi8-r");
и
$theURL = from_to($theURL,"utf8","koi8-r");
?
спустя 52 минуты [обр] Владимир Клемято[досье]

arto[досье] В моем последнем посте, в коде, я это поправил, но результат остался тем же. Поэтому я Вас прошу указать на мою ошибку.
Привожу еще раз код .cgi скрипта:

#!/usr/local/bin/perl
use Encode 'from_to'; 
$theURL = "%D0%A1%D1%83%D0%BF%D0%B5%D1%80-%D0%BF%D1%83%D0%BF%D0%B5%D1%80+%D1%84%D0%BE%D1%80%D1%83%D0%BC";
$theURL =~ s*%(..)*chr(hex($1))*ge;
$theURL = from_to($theURL,"utf8","koi8-r");
print "$theURL";

В результате:
17

спустя 2 минуты [обр] Владимир Клемято[досье]

Владимир Клемято[досье]
Кстати, если я даже ставлю

$theURL = from_to($theURL,"utf8","cp1251");

Все равно в результате получаю на выводе:
17
В чем беда???

спустя 19 минут [обр] Владимир Клемято[досье]

arto[досье]

$theURL = "%D0%A1%D1%83%D0%BF%D0%B5%D1%80-%D0%BF%D1%83%D0%BF%D0%B5%D1%80+%D1%84%D0%BE%D1%80%D1%83%D0%BC";
use Encode 'from_to';
$theURL =~ s*%(..)*chr(hex($1))*ge;
print "$theURL<br>"; # Чисто дает Юникод UTF-8 Но как теперь из UTF-8 перевести в Win cp1251???
$theURL2 = from_to($theURL,"utf8","koi8-r");
$theURL3 = from_to($theURL,"utf8","cp1251");
print "2: $theURL2<br>3: $theURL3";

Супер-пупер+форум

2: 17
3: 17

Чисто дает Юникод UTF-8 Но как теперь из UTF-8 перевести в Win cp1251???
Почему-то:

$theURL2 = from_to($theURL,"utf8","koi8-r");

не срабатывает и выдает:
17

спустя 15 минут [обр] arto(81/497)[досье]
а если напечатать $theURL ?
спустя 33 минуты [обр] Владимир Клемято[досье]
$theURL = "%D0%A1%D1%83%D0%BF%D0%B5%D1%80-%D0%BF%D1%83%D0%BF%D0%B5%D1%80+%D1%84%D0%BE%D1%80%D1%83%D0%BC";
use Encode 'from_to';
$theURL =~ s*%(..)*chr(hex($1))*ge;
print "$theURL<br>";
$theURL2 = from_to($theURL,"utf8","koi8-r");
$theURL3 = from_to($theURL,"utf8","cp1251");
print "1: $theURL<br>2: $theURL2<br>3: $theURL3";

Супер-пупер+форум

1: ?????-?????+?????
2: 17
3: 17

спустя 1 минуту [обр] Владимир Клемято[досье]
arto[досье]
Почему меняется переменная $theURL ?
при первом принте, она: Супер-пупер+форум
при втором: ?????-?????+?????
спустя 1 минуту [обр] Владимир Клемято[досье]
arto[досье]
почму $theURL2 и $theURL3 выводят кол-во символов (17), а не перекодируют в нужную кодировку?
спустя 57 минут [обр] Давид Мзареулян(5/1003)[досье]
Потому что, блин, мануал читать надо!

[$length =] from_to($octets, FROM_ENC, TO_ENC [, CHECK])

    Converts in-place data between two encodings.

    from_to() returns the length of the converted string in octets on success, undef otherwise.

спустя 19 минут [обр] Владимир Клемято[досье]
arto[досье]
Спасибо за мануал. Вы бы не могли все-таки привети код, который бы мою строку с utf8 перевел в cp1251 и я переведенное прочитал на экране?
спустя 5 минут [обр] Владимир Клемято[досье]

Давид Мзареулян[досье]
Спасибо, Вот то, что мне было нужно:

$theURL = "%D0%A1%D1%83%D0%BF%D0%B5%D1%80-%D0%BF%D1%83%D0%BF%D0%B5%D1%80+%D1%84%D0%BE%D1%80%D1%83%D0%BC";
$theURL =~ s*%(..)*chr(hex($1))*ge;
$theURL = encode("cp1251", decode("utf8", $theURL)); 
print "$theURL";

Результат:
Супер-пупер+форум

спустя 1 час 32 минуты [обр] Давид Мзареулян(5/1003)[досье]
Владимир Клемято[досье] Плюс на пробел замените. Перед url-раскодированием.
спустя 1 день 7 часов [обр] Евгений Иванов(0/6)[досье]
переходите на Unicode, советую.
Powered by POEM™ Engine Copyright © 2002-2005