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

Исходное сообщение
"Преобразование Hex в соответствуюший символ"

Отправлено Gleb , 06-Июл-06 11:40 
Hi, All!

Народ,
Необходимо преобразовать запись вида
=D0=90=D0=B2=D1=82=D0=BE=D1=81=D0=B5=D1=80=D0=B2=D0=B8=D1=81
в символьную

замена

s/=([\dA-F][\dA-F])/\\x$1/g;
print;

выдает
\xD0\x90\xD0\xB2\xD1\x82\xD0\xBE\xD1\x81\xD0\xB5\xD1\x80\xD0\xB2\xD0\xB8\xD1\x81
вместо символов

хотя такая конструкция

$_ = "\xD0\x90\xD0\xB2\xD1\x82\xD0\xBE\xD1\x81\xD0\xB5\xD1\x80\xD0\xB2\xD0\xB8\xD1\x81";
print;

работает как нужно

Что делать?


Содержание

Сообщения в этом обсуждении
"Преобразование Hex в соответствуюший символ"
Отправлено madskull , 06-Июл-06 12:00 
>Что делать?

один из вариантов:
s/=([0-9a-f]{2})/chr(hex($1))/ige;

другой
$_=join"",map{pack"H",$_}split"="';


"Преобразование Hex в соответствуюший символ"
Отправлено Gleb , 06-Июл-06 12:10 
>>Что делать?
>
>один из вариантов:
>s/=([0-9a-f]{2})/chr(hex($1))/ige;
>
>другой
>$_=join"",map{pack"H",$_}split"="';


Преогромнейшее спасибо


"Преобразование Hex в соответствуюший символ"
Отправлено Alexander S. Salieff , 06-Июл-06 17:48 
>>Что делать?
>
>один из вариантов:
>s/=([0-9a-f]{2})/chr(hex($1))/ige;
>
>другой
>$_=join"",map{pack"H",$_}split"="';


Я так понимаю что это quoted-printable кодировка? Тогда для многострочного форматирования стоит еще добавить
s/=[\r\n]+//g;
Потому как одинокое "=" перед переводом строки - это фиктивный перенос для удобства, при декодировании его треба убрать.