O hexdump pode exibir suas traduções de texto em codificações alternativas?

3

O formato canônico do Hexdump exibe uma tradução em ASCII do que está procurando na coluna da direita. Eu tenho um arquivo binário, contendo seqüências de caracteres não-ASCII, para o qual eu conheço alguns (não todos) do conjunto de caracteres. Existe uma maneira de dizer ao hexdump para usar um conjunto de caracteres personalizado ao produzir sua coluna de texto?

    
por Andrew 10.08.2016 / 05:54

1 resposta

2

Para o Debian, isso é parte de bsdmainutils , cuja fonte está no git . O programa tenta (existem algumas limitações não especificadas) para exibir caracteres multibyte (por exemplo, UTF-8) para a opção -c .

A fonte para isso está em conv.c , que observa:

/*
 * Multibyte characters are disabled for hexdump(1) for backwards
 * compatibility and consistency (none of its other output formats
 * recognize them correctly).
 */

no entanto, o código faz isso apenas se odmode estiver definido, que é ativado somente quando o executável é chamado como od . O% realod na Debian é a versão GNU, que não faz isso. Você pode obter o recurso multibyte copiando hexdump para (de preferência, não /usr/bin ) od e executando isso, por exemplo,

~/bin/od -bc foo

Como exemplo, em ncurses-examples , bulgarian.txt is

Показване на помощна информация -- 1
Създаване на дялове             -- 2
Избор на дял и форматиране      -- 3
Записване в избрания дял        -- 4
Инсталиране на LILO             -- 5
Изход от програмата             -- 6

é exibido na versão GNU como

0000000 320 237 320 276 320 272 320 260 320 267 320 262 320 260 320 275 
        320 237 320 276 320 272 320 260 320 267 320 262 320 260 320 275 
0000020 320 265 040 320 275 320 260 040 320 277 320 276 320 274 320 276 
        320 265     320 275 320 260     320 277 320 276 320 274 320 276 
0000040 321 211 320 275 320 260 040 320 270 320 275 321 204 320 276 321 
        321 211 320 275 320 260     320 270 320 275 321 204 320 276 321 
0000060 200 320 274 320 260 321 206 320 270 321 217 040 055 055 040 061
        200 320 274 320 260 321 206 320 270 321 217       -   -       1 
0000100 012 320 241 321 212 320 267 320 264 320 260 320 262 320 260 320 
         \n 320 241 321 212 320 267 320 264 320 260 320 262 320 260 320 
0000120 275 320 265 040 320 275 320 260 040 320 264 321 217 320 273 320
        275 320 265     320 275 320 260     320 264 321 217 320 273 320 
0000140 276 320 262 320 265 040 040 040 040 040 040 040 040 040 040 040 
        276 320 262 320 265
...

e na versão BSD como

0000000    П  **   о  **   к  **   а  **   з  **   в  **   а  **   н  **
0000020    е  **       н  **   а  **       п  **   о  **   м  **   о  **
0000040    щ  **   н  **   а  **       и  **   н  **   ф  **   о  **   р
0000060   **   м  **   а  **   ц  **   и  **   я  **       -   -       1
0000100   \n   С  **   ъ  **   з  **   д  **   а  **   в  **   а  **   н
0000120   **   е  **       н  **   а  **       д  **   я  **   л  **   о
0000140   **   в  **   е  **
....

A razão para o comentário de compatibilidade / consistência é que o hexdump é O formato lado a lado não permite caracteres de largura dupla e os caracteres multibyte podem ter largura dupla. O formato usado para od permite isso (e você pode ver no exemplo que apenas tenta exibir esses caracteres).

    
por 10.08.2016 / 10:50

Tags