strings 是 Debian(以及一般 GNU/Linux 系统)中 binutils 包提供的工具,用于从二进制文件中提取可打印字符串。
关于它支持的编码,需要分几个层面来说:
strings)传统 strings 只识别 单字节可打印字符序列,默认字符集等价于:
它并不真正“解析编码”,只是扫描连续的可打印字节。
在 GNU binutils 2.39+ 中,strings 开始支持通过 --encoding(-e)指定编码:
strings --encoding=<encoding> file
支持的编码包括(常见):
s:单字节(默认,等价于 ASCII)S:单字节(同 s,历史兼容)b:16-bit 小端(UTF-16LE)B:16-bit 大端(UTF-16BE)l:32-bit 小端(UTF-32LE)L:32-bit 大端(UTF-32BE)示例:
strings -e b binaryfile
strings 也能“碰巧”显示出 UTF-8 字符串(只要中间没有非法字节)。strings 不支持:
如果需要处理这些编码,通常要:
strings file | iconv -f UTF-16 -t UTF-8
或配合 grep / recode / python 使用。
| 编码类型 | strings 支持情况 |
|---|---|
| ASCII | ✅ 默认 |
| UTF-8 | ✅ 间接(字节级) |
| UTF-16 | ✅(-e b/B) |
| UTF-32 | ✅(-e l/L) |
| GBK / 其他 | ❌ 不支持 |
如果你愿意,我可以给你一个 Debian 上提取中文/UTF-16 字符串的完整示例。