Как получить UTF8 из шестнадцатеричной переменной?

Как получить UTF8 из шестнадцатеричной переменной?

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

Я прошу клиента повторно отправить мне простой текст из инструментов БД, но, ожидая его ответа, я ищу решение на 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)

Связанный контент