Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Проблемы с перекодировкой шестнадцатир. симв. в кириллицу
цитата
31/08/05 в 12:37
 svs
Проблема такая:
В лог-файле фиксирую строку HTTP_REFERER юзера, пришедшего из поисковика. В строке присутствует и сам запрос, но он в шестнадцатиричной форме типа - %d0%90... Мне надо перекодировать строку, чтобы можно было прочитать.
Пробовал так:
$str=uri_unescape($str);
или так
$str=~s/%([0-9a-fA-F]{2})/pack("c",hex($1))/ge;
Оба варианта перекодируют, но в какую то непонятную кодировку, не в windows-1251.
цитата
31/08/05 в 12:42
 Kors
наверное это КОИ-8...
цитата
31/08/05 в 14:39
 svs
Немножко разобрался, но проблема остается.
Запросы с Яндекса расшифровываются нормально, а вот запросы с MNS нет. Дело в том, что на http://search.msn.com/ стоит кодировка utf-8. То есть сам текст в этой кодировке. А у меня на сайте естественно windows-1251.
Тогда уточняю проблему.
Есть текст в кодировке utf-8 (или в другой), как его перекодировать средствами Perl в нужную кодировку?

p.s. С Яндекса тоже не все запросы расшифровываются
цитата
31/08/05 в 16:07
 bjim
а PHP не подойдет? там есть библиотека iconv...

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

это библиотека для конвертирования кодировок...
цитата
31/08/05 в 17:22
 svs
Все получилось!!! Благодарю.
Вот какой ответ:

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)
цитата
19/09/07 в 01:09
 Andrew z
Ключевые слова из HTTP_REFERER фиксируй через Referer, который автоматически декодирует их.
цитата
19/09/07 в 09:59
 Kors
Andrew z: спецом зарегался чтобы топик двухлетней давности поднять? icon_smile.gif
цитата
19/09/07 в 10:50
 DelGod
все гениальное просто =)

use URI::Escape;
use Encode;

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


Эта страница в полной версии