hexdump 可以以替代编码显示其文本翻译吗?

hexdump 可以以替代编码显示其文本翻译吗?

Hexdump 的规范格式显示右列中所查看内容的 ASCII 翻译。我有一个二进制文件,其中包含非 ASCII 字符串,我知道该文件的一些(不是全部)字符集。有没有办法告诉 hexdump 在生成其文本列时使用自定义字符集?

答案1

对于 Debian,这是 的一部分bsdmainutils,其源码在git中。该程序尝试(有一些未指定的限制)显示多字节字符(例如,UTF-8)-c选项。

来源是转换c,其中指出:

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

但是,代码仅odmode在设置时才执行此操作,仅当调用可执行文件时才激活该设置od。 Debian中实际的od是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   **   в  **   е  **
....

兼容性/一致性注释的原因是 hexdump 的并排格式不允许使用双宽字符,而多字节字符可以是双宽。使用的格式允许od这样做(并且您可以从示例中看到它仅尝试显示这些字符)。

相关内容