在 Linux 下使用 strings 命令输出出现乱码,通常不是 strings 本身坏了,而是编码、对象类型或参数使用不当导致的。下面按常见原因给你一个排查和解决清单。
strings 默认只提取可打印字符序列,但:
✅ 解决
strings -n 6 yourfile
-n 6:只显示长度 ≥ 6 的字符串(过滤掉噪声)如果文件是:
而你的终端是 UTF-8,就会乱码。
✅ 解决:先转码再 strings
iconv -f gbk -t utf-8 yourfile | strings
或先查看编码:
file yourfile
检查终端编码:
locale
✅ 推荐设置:
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
然后重新执行 strings
strings 默认只扫描:
.rodata、.data 等段✅ 强制扫描整个文件
strings -a yourfile
或:
strings -a -n 6 yourfile
例如:
✅ 解决
binwalk 分析:binwalk yourfile
有时不是乱码,而是:
✅ 过滤不可见字符
strings yourfile | tr -cd '[:print:]\n'
strings -a -n 6 yourfile
如果还有中文乱码:
iconv -f gbk -t utf-8 yourfile | strings -a -n 6
| 现象 | 原因 |
|---|---|
全是 ^@、@、\x |
二进制噪声 |
中文变成 ?? |
编码不匹配 |
| 输出像随机字符 | 非字符串数据 |
| 只有少量内容 | 扫描范围太小 |
你可以直接贴:
file yourfile)我可以给你针对性的 strings 参数或替代方案(比如 xxd、hexdump、grep)。