URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8644
[ Назад ]

Исходное сообщение
"Замена 16-ричного кода символом из кодовой таблицы"

Отправлено blitzkrieg , 12-Мрт-10 10:12 
Есть файл скажем содержащий это 20 ef f0 e8 20, нужен на perl скрипт который бы заменял 16-ричный код на соответствующий символ из кодовой таблицы cp1251 скажем (также cp866).
Как это сделать наиболее грамотно и рационально, не городить же вещи типа:
$str=~ s/ef/п/
$str=~ s/f0/р/
$str=~ s/e8/и/
и т.д.
Может быть есть готовая функция?

Содержание

Сообщения в этом обсуждении
"Замена 16-ричного кода символом из кодовой таблицы"
Отправлено sproot , 12-Мрт-10 13:19 
>Есть файл скажем содержащий это 20 ef f0 e8 20, нужен на
>perl скрипт который бы заменял 16-ричный код на соответствующий символ из
>кодовой таблицы cp1251 скажем (также cp866).
>Как это сделать наиболее грамотно и рационально, не городить же вещи типа:
>
>$str=~ s/ef/п/
>$str=~ s/f0/р/
>$str=~ s/e8/и/
>и т.д.
>Может быть есть готовая функция?

Есть модуль Encode.


"Замена 16-ричного кода символом из кодовой таблицы"
Отправлено blitzkrieg , 12-Мрт-10 16:25 
Почитал про модуль, что-то не очень понимаю чем он мне может помочь.
Можно поконкретнее ткнуть носом?

"Замена 16-ричного кода символом из кодовой таблицы"
Отправлено sproot , 13-Мрт-10 12:08 
>Почитал про модуль, что-то не очень понимаю чем он мне может помочь.
>
>Можно поконкретнее ткнуть носом?

sproot@matrix:tmp$ cat test.txt
20 ef f0 e8 20
sproot@matrix:tmp$ perl -MEncode -i'.orig' -ne '$_=~s/([[:xdigit:]]{2})/chr(hex($1))/eg; print decode("cp1251", $_);' test.txt
Wide character in print at -e line 1, <> line 1.
sproot@matrix:tmp$ cat test.txt
  п р и


"Замена 16-ричного кода символом из кодовой таблицы"
Отправлено blitzkrieg , 13-Мрт-10 13:32 
спасибо.