如何从十六进制变量获取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)

相关内容