温馨提示×

debian strings支持哪些编码

小樊
48
2026-09-04 00:12:18
栏目: 智能运维

strings 是 Debian(以及一般 GNU/Linux 系统)中 binutils 包提供的工具,用于从二进制文件中提取可打印字符串。

关于它支持的编码,需要分几个层面来说:


1. 默认行为(传统 strings

传统 strings 只识别 单字节可打印字符序列,默认字符集等价于:

  • ASCII(0x20–0x7E)
  • 可选包含一些扩展 ASCII(取决于区域设置)

它并不真正“解析编码”,只是扫描连续的可打印字节。


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

3. 对 UTF-8 / 多字节编码的支持

  • UTF-8
    因为 UTF-8 是兼容 ASCII 的多字节编码,所以默认 strings 也能“碰巧”显示出 UTF-8 字符串(只要中间没有非法字节)。
  • 但它不会按字符边界解析 UTF-8,只是按字节扫描。

4. 局限

strings 不支持

  • GBK / GB2312
  • Shift-JIS
  • EUC-KR
  • 自动编码检测
  • 完整的 Unicode 规范化

如果需要处理这些编码,通常要:

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 字符串的完整示例

0