16 進変数から UTF8 を取得するにはどうすればよいでしょうか?

16 進変数から UTF8 を取得するにはどうすればよいでしょうか?

クライアントのアプリをデバッグしているときに、DB から解決策になりそうな情報を見つけました。クライアントにその情報を抽出するように依頼しましたが、残念ながらクライアントは 16 進数で生データを送信してきました...

クライアントに DB ツールからのプレーンテキストを再送信するように依頼していますが、返答を待っている間に 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が、これはどちらに対しても特別なのでxargssed2 回重ねる必要があります。( \\\\x-> \\x-> \x)

関連情報