简短回答:
strings 正常情况下不会输出乱码,但如果你的用法不当或数据本身不是“可读字符串”,就可能看到像乱码一样的内容。
strings 可能“看起来像乱码”strings 的作用是:
从二进制文件中提取连续的可打印字符
如果二进制文件里本来就没有真正的字符串,只是一些字节数据,那输出自然看起来像乱码。
例如:
strings /bin/ls
你会看到:
✅ 这是正常现象,不是乱码
strings 只认 ASCII / 可打印字符(7-bit)。
如果你要提取的是:
那么很可能:
示例:
strings test.bin
如果 test.bin 里有 UTF‑8 中文,strings 可能显示错乱。
✅ 这是 strings 本身的局限,不是 bug
有时你看到类似:
UH\x89
\x00\x00
这是因为:
strings -n 6 filename
避免提取太短的“无意义字符组合”。
-e 指定编码(有限支持)strings -e l filename # 16-bit little-endian
strings -e b filename # 16-bit big-endian
⚠️ 但对 UTF‑8 支持仍然有限。
grep 过滤strings file | grep -v '[^ -~]' # 只显示纯 ASCII
strings| 场景 | 建议 |
|---|---|
| 看中文字符串 | 用 hexdump / xxd + 手动分析 |
| 分析 Unicode | 用 iconv、file、enca |
| 查看可读文本 | 直接用 cat / less |
strings本身不会乱码,
但它不是“文本查看器”,不是为 UTF‑8 / 中文设计的。
如果你愿意,可以把具体的命令 + 输出示例发出来,我可以帮你判断是“正常行为”还是“真的有问题”。