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
这样做(并且您可以从示例中看到它仅尝试显示这些字符)。