16進変数からUTF8を取得するには?

16進変数からUTF8を取得するには?

クライアント用のアプリケーションをデバッグしていますが、データベースで問題を解決した情報が見つかりました。クライアントに抽出を要求しましたが、残念ながらクライアントは16進数の生データを送信しました...

私はクライアントにデータベースツールからプレーンテキストを再送信するように頼んでいますが、応答を待っている間私は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)

関連情報