
我正在為客戶調試一個應用程序,我從資料庫中找到了可以解決問題的資訊。我要求客戶提取它,但不幸的是客戶向我發送了十六進制的原始資料...
我要求客戶從資料庫工具重新向我發送純文本,但在等待他們的回复時我正在尋找 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
)