Como obter o UTF8 de uma variável hexadecimal?

7

Estou depurando um aplicativo para um cliente e encontrei as informações do banco de dados que poderiam ser uma solução. Eu peço ao cliente para extraí-lo, mas infelizmente o cliente me enviou os dados brutos em hexadecimal ...

Peço ao cliente que me reenvie o texto sem formatação das ferramentas de banco de dados, mas aguardo sua resposta. Estou procurando uma solução bash.

Eu sei que os dados codificados são uma string codificada em UTF-8: existe uma maneira de decodificá-los com ferramentas Unix?

    
por Fractaliste 24.04.2017 / 08:27

2 respostas

11

Com xxd (geralmente enviado com vim )

$ echo 5374c3a97068616e650a | xxd -p -r
Stéphane

Se o conjunto de caracteres do seu código de idioma (consulte a saída de locale charmap ) não for UTF-8 (mas puder representar todos os caracteres na sequência codificada), adicione um | iconv -f UTF-8 .

Se não puder representar todos os caracteres, você pode tentar usar | iconv -f UTF-8 -t //TRANSLIT para obter uma aproximação.

    
por 24.04.2017 / 10:35
3

O Perl conta?

$ echo "68656c6c6f0a" | \
  perl -ne 'tr/a-fA-F0-9//cd; print pack("H*", $_)'
hello

Se não, então talvez isso possa ser feito:

$ echo "68656c6c6f0a" | sed -Ee 's/[0-9a-fA-F]{2}/\\x&/g' | xargs printf 
hello

Precisamos de uma barra invertida literal para printf , mas é especial para xargs e sed , portanto, precisa ser dobrada duas vezes. ( \\x - > \x - > \x )

    
por 24.04.2017 / 10:30