Intereting Posts

Может ли hexdump отображать свои текстовые переводы в альтернативных кодировках?

Канонический формат Hexdump отображает ASCII-перевод того, что он смотрит в правой колонке. У меня есть двоичный файл, содержащий строки, отличные от ASCII, для которых я знаю некоторые (не все) набора символов. Есть ли способ сказать hexdump использовать настраиваемый набор символов при создании его текстового столбца?

    Для Debian это часть bsdmainutils , источник которой находится в git . Программа пытается (есть некоторые неуказанные ограничения) для отображения многобайтовых символов (например, UTF-8) для параметра -c .

    Источник для этого в conv.c , который отмечает:

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

    однако код делает это только в том случае, если odmode , который активируется только тогда, когда исполняемый файл вызывается как od . Фактический od в Debian – это версия GNU, которая этого не делает. Вы можете получить многобайтовую функцию, скопировав hexdump (предпочтительно не /usr/bin ) od и выполнив это, например,

     ~/bin/od -bc foo 

    В качестве примера, из ncurses-примеров , bulgarian.txt

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

    отображает в версии GNU как

     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 ... 

    и в версии BSD как

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

    Причиной для комментария совместимости / согласованности является то, что формат sided-side в hexdump не позволяет использовать символы двойной ширины, а многобайтовые символы могут быть двойной ширины. Формат, используемый для od позволяет это (и вы можете видеть из примера, что он только пытается отобразить эти символы).