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