如何從十六進位變數取得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)

相關內容