Реклама на сайте Advertise with us

Проблемы с перекодировкой шестнадцатир. симв. в кириллицу

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:
+ + +


С нами с 22.08.05
Сообщения: 52
Рейтинг: 1

Ссылка на сообщениеДобавлено: 31/08/05 в 12:37       Ответить с цитатойцитата 

Проблема такая:
В лог-файле фиксирую строку HTTP_REFERER юзера, пришедшего из поисковика. В строке присутствует и сам запрос, но он в шестнадцатиричной форме типа - %d0%90... Мне надо перекодировать строку, чтобы можно было прочитать.
Пробовал так:
$str=uri_unescape($str);
или так
$str=~s/%([0-9a-fA-F]{2})/pack("c",hex($1))/ge;
Оба варианта перекодируют, но в какую то непонятную кодировку, не в windows-1251.

0
 

full-plastic programmist

С нами с 05.09.03
Сообщения: 8361
Рейтинг: 4779

Ссылка на сообщениеДобавлено: 31/08/05 в 12:42       Ответить с цитатойцитата 

наверное это КОИ-8...

вот соскучился по мастеру...

0
 
+ + +


С нами с 22.08.05
Сообщения: 52
Рейтинг: 1

Ссылка на сообщениеДобавлено: 31/08/05 в 14:39       Ответить с цитатойцитата 

Немножко разобрался, но проблема остается.
Запросы с Яндекса расшифровываются нормально, а вот запросы с MNS нет. Дело в том, что на http://search.msn.com/ стоит кодировка utf-8. То есть сам текст в этой кодировке. А у меня на сайте естественно windows-1251.
Тогда уточняю проблему.
Есть текст в кодировке utf-8 (или в другой), как его перекодировать средствами Perl в нужную кодировку?

p.s. С Яндекса тоже не все запросы расшифровываются

0
 



С нами с 03.08.04
Сообщения: 129
Рейтинг: 263

Ссылка на сообщениеДобавлено: 31/08/05 в 16:07       Ответить с цитатойцитата 

а PHP не подойдет? там есть библиотека iconv...

ну а для Perl можно скачать модуль Text::Iconv с CPAN..
http://search.cpan.org/dist/Text-Iconv/

это библиотека для конвертирования кодировок...

3
 
+ + +


С нами с 22.08.05
Сообщения: 52
Рейтинг: 1

Ссылка на сообщениеДобавлено: 31/08/05 в 17:22       Ответить с цитатойцитата 

Все получилось!!! Благодарю.
Вот какой ответ:

use Text::Iconv;
my $converter = Text::Iconv->new("UTF-8", "windows-1251"); # Перкодируем из UTF-8 в win12551
while(<FILE>){
$str=$_;
$str=~s/%([0-9a-fA-F]{2})/pack("c",hex($1))/ge; #Переводим шестнадц. код в ASCI коды
$str = $converter->convert($str); # Конвертируем один код в другой
print $str
}
Правда, не знаю, как работать с несколькими кодировками. Но это уже детали. Разберемси icon_smile.gif)

0
 



С нами с 19.09.07
Сообщения: 1

Ссылка на сообщениеДобавлено: 19/09/07 в 01:09       Ответить с цитатойцитата 

Ключевые слова из HTTP_REFERER фиксируй через Referer, который автоматически декодирует их.

0
 

full-plastic programmist

С нами с 05.09.03
Сообщения: 8361
Рейтинг: 4779

Ссылка на сообщениеДобавлено: 19/09/07 в 09:59       Ответить с цитатойцитата 

Andrew z: спецом зарегался чтобы топик двухлетней давности поднять? icon_smile.gif

вот соскучился по мастеру...

0
 



С нами с 08.03.05
Сообщения: 114
Рейтинг: 118

Ссылка на сообщениеДобавлено: 19/09/07 в 10:50       Ответить с цитатойцитата 

все гениальное просто =)

use URI::Escape;
use Encode;

while (<>) {
$k=uri_unescape $_ ;
$k=decode('utf8',$k);
$k=encode('cp1251',$k);
print $k;
}

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »