温馨提示×

linux strings能搜中文字符吗

小樊
47
2026-09-08 11:53:23
栏目: 智能运维

strings 默认情况下可以“看到”中文字符,但能不能搜到,取决于文件的编码和你的使用方式


1. 先说结论

  • UTF-8 编码的中文strings 能提取出来(因为 UTF-8 是字节流,包含可见 ASCII 范围外的字节)
  • GBK / GB2312 编码的中文strings 默认不一定能正确识别,可能显示为乱码或搜不到
  • ❌ 纯中文、没有连续 ASCII 字符的文本:strings 可能直接忽略

2. 为什么 strings 对中文“不友好”

strings 的设计初衷是:

从二进制文件中提取可打印字符序列

默认规则:

  • 只输出连续的可打印字符
  • 默认字符集是 ASCII(或扩展 ASCII)
  • 中文字符(尤其是 GBK)不在默认可打印范围内

3. 实际测试示例

UTF-8 中文(通常没问题)

echo "你好world" > test.txt
strings test.txt

输出:

你好world

GBK 中文(可能乱码)

echo "你好" | iconv -t GBK > gbk.txt
strings gbk.txt

可能输出乱码或空


4. 想更好支持中文的办法

✅ 方法 1:指定编码(推荐)

strings -e S file.bin

常见参数:

  • -e S:16-bit UTF-16
  • -e L:32-bit UTF-32
  • -e B:16-bit Big Endian

✅ 方法 2:配合 iconv 转码

strings file | iconv -f GBK -t UTF-8

✅ 方法 3:用 grep 直接搜

grep -a "错误" binary_file

-a 把文件当文本处理

✅ 方法 4:用更专业的工具

  • binwalk
  • radare2 / Ghidra
  • strings + less(手动看)

5. 总结一句话

strings 能搜 UTF-8 中文,但不适合直接处理 GBK 或复杂中文编码,配合转码或 grep 更靠谱。

如果你有具体文件类型(ELF / exe / 日志 / 固件),我可以给你更精确的命令。

0