Que programa (editor hexadecimal) pode converter de string de código hexadecimal para unicode?

0

Suponha que eu tenha string, retornado em Json, como

004100610061

Is é string. Mas se interpretado como Hex e, em seguida, como Unicode, isso significará

Aaa

Qual editor hexadecimal pode fornecer a capacidade de decodificar isso?

Com o Bless, consegui colar hexadecimal, mas não consigo ver Unicode.

    
por Dims 12.11.2016 / 13:28

3 respostas

2

Você poderia usar o xxd. Por exemplo:

xxd -r -p <(echo 004100610061)

Claro que não colocaremos uma nova linha extra, então você pode querer invocar imediatamente o eco também, por exemplo:

xxd -r -p <(echo 004100610061) ; echo

Então, novamente, talvez o redirecionamento maluco torne esses comandos confusos, então talvez seja mais fácil seguir o que ele faz dessa maneira:

echo 004100610061 | xxd -r -p ; echo

xxd lê a entrada de echo e -r diz para ir de um despejo hexadecimal de volta para binário, e o -p diz que esquece de procurar informações de endereço no despejo hexadecimal, e então o eco insere uma nova linha extra. Portanto, esses comandos são todos apenas xxd lendo sua entrada do padrão, convertendo os valores hexadecimais de volta em binário e exibindo-os.

Editar: Como aponta @Rudd, isso será apenas saída binária. Seu terminal provavelmente irá ignorar os bits não-imprimíveis e estupidamente interpretá-lo como ascii, então coloque alguns bytes extras lá e redirecione sua saída para um arquivo para uma conversão mais precisa.

Por exemplo, se você sabe que sua entrada é big endian utf-16:

echo feff004100610061 | xxd -r -p > output.txt

Em seguida, visualize o resultado em um editor com reconhecimento de unicode.

Por exemplo:

vim output.txt

Para outras listas de materiais de codificação, consulte wikipedia

    
por Stephen 12.11.2016 / 21:02
1

Em Perl:

echo 004100610061 | perl -CS -pe 's/[0-9A-F]{4}/chr(hex($&))/egi'

Saída:

Aaa

A opção de linha de comando -CS força a saída a ser codificada em UTF-8.

    
por Ruud Helderman 12.11.2016 / 21:37
1

Você pode desistir de instalar softwares adicionais e usar o editor Vi / Vim, que está integrado em qualquer distribuição Linux.

O comando substituto do Vi ( :s ) permite fazer isso seguindo o seguinte padrão:

 :%s/\(\x\{4\}\)/\=nr2char('0x'.submatch(1),1)/g

Simples :s substitui apenas a linha atual, enquanto :%s substitui os códigos em todas as linhas.
Existem outras maneiras de simplificar a representação Unicode no Vim, mas elas exigem plugins ou configuração de dígrafos.

Nota: para a implementação acima, você precisa do VIM completo, mas não do VIM-tiny. O parâmetro nr2char é válido somente a partir da versão 7.4, se você tiver uma versão inferior do VIM, pode deixar esse parâmetro de lado, o que não deve afetar a funcionalidade de nenhuma maneira.

    
por Suncatcher 12.11.2016 / 18:34