
Я отлаживаю приложение для клиента и нашел информацию из базы данных, которая может быть решением. Я прошу клиента извлечь ее, но, к сожалению, клиент прислал мне необработанные данные в шестнадцатеричном формате...
Я прошу клиента повторно отправить мне простой текст из инструментов БД, но, ожидая его ответа, я ищу решение на bash.
Я знаю, что закодированные данные представляют собой строку в кодировке UTF-8: есть ли способ декодировать ее с помощью инструментов Unix?
решение1
С xxd
(обычно поставляется с vim
)
$ echo 5374c3a97068616e650a | xxd -p -r
Stéphane
Если кодировка вашей локали (см. вывод locale charmap
) не соответствует UTF-8 (но может представлять все символы в закодированной строке), добавьте | iconv -f UTF-8
.
Если он не может отобразить все символы, можно попытаться | iconv -f UTF-8 -t //TRANSLIT
получить приближенное значение.
решение2
А Perl считается?
$ echo "68656c6c6f0a" | \
perl -ne 'tr/a-fA-F0-9//cd; print pack("H*", $_)'
hello
Если нет, то, возможно, подойдет следующее:
$ echo "68656c6c6f0a" | sed -Ee 's/[0-9a-fA-F]{2}/\\\\x&/g' | xargs printf
hello
Нам нужен буквальный обратный слеш для printf
, но он является специальным для обоих xargs
и sed
поэтому его нужно удвоить дважды. ( \\\\x
-> \\x
-> \x
)