Модуль кодирования / декодирования XS Unicode% uXXXX в Perl - PullRequest
0 голосов
/ 19 января 2012

Существует ли какой-либо модуль Perl XS с высокоскоростными подпрограммами, подходящий для кодирования / декодирования нестандартных символов юникода% uXXXX, обнаруженных в файлах cookie юникода (особенно Firefox)?

декодирование: input = ...% uXXXX ..., output = обычная строка Perl utf8
кодировка: input = обычная строка Perl utf8, output = ...% uXXXX ...

Теперь я декодирую эти строки, используя этот код:

    $string =~ s/%u([A-Fa-f0-9]{4})/chr(hex($1))/eg;

но было бы неплохо иметь C-реализованную версию.

Ответы [ 2 ]

2 голосов
/ 19 января 2012

Этот конкретный формат не относится к файлам cookie сам по себе, но является одной из распространенных форм специального кодирования, применяемого к файлам cookie. Он генерируется функцией JavaScript escape(). Это выглядит как кодировка URL, но не совместимо; Авторам JS действительно нужно прекратить его использование.

URI :: Escape :: JavaScript имеет реализацию, которая воспроизводит алгоритм unescape. Это в основном тот же подход, что и у вас, но он также обрабатывает двузначный шаблон %xx.

Модули, которые пытаются трактовать JS-escape-кодирование как расширение URL-кодировки, могут сработать при потенциально различной обработке символа +.

Я сомневаюсь, что какое-либо приложение потратит достаточно времени на их расшифровку, чтобы на самом деле это стоило делать в Си.

0 голосов
/ 19 января 2012

Как насчет двух?


URL :: Encode :: XS также существует, но не соответствует требованию.

...