Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

JS-string decode by Bash

Столкнулся я тут с необходимостью раскодировать строку в том формате, который используется в JSON, т. е. когда символы, кроме латиницы и ещё некоторых знаков кодируются как \uXXXX.

Можно было, конечно, вызвать какой-нибудь нормальный интерпретатор, благо на «Маке» их хватает («из коробки» есть ПХП, Перл, Пайтон, Руби, ещё что-то там), но неспортивно как-то.

Сделал на «Баше» и утилитах командной строки (кстати, легко переделать, при желании, и на «sh»):

:|sed -E '' 2>&- && SED='sed -E' || SED='sed -r'

uNNNNhelper() {
    printf $(echo -n "$@") | iconv -f utf-16be
}

uNNNN() {
    eval $(
        echo -n "$@" |
        $SED '
            s/([^[:alnum:]])/\\\1/g
            s/^/echo /
            s/((\\\\[Uu]....)+)/$(uNNNNhelper \1)/g
            s/\\\\[Uu](..)(..)/\\\\x\1\\\\x\2/g
        '
    )
}

uNNNN 'Hello, \U043C\U0438\U0440!' # выведет «Hello, мир!»
2 комментария
Читатель 2013

Да, не всякий код нуждается в обфускации :)

Евгений Степанищев (bolknote.ru) 2013

Комментарий для Читатель:

Это очень простой код :) Тут просто регулярные выражения (правда простые очень), если их знать, читается запросто. У меня есть образец действительно головоломного bash-кода, не моего авторства, как-нибудь покажу.