在 Linux 下使用 strings 命令时出现“乱码”,通常不是真的乱码,而是对输出内容的理解或环境设置问题。常见原因和对应解释如下:
strings 的作用是:从二进制文件中提取“可打印字符序列”。
例如:
strings a.out
你看到的内容可能是:
/lib64/ld-linux-x86-64.so.2
__libc_start_main
Hello, World
其中很多是符号名、路径、编译器信息,本来就不是给人读的文章,看起来像“乱码”很正常。
✅ 这是正常现象,不是错误。
如果文件里包含中文或其他非 ASCII 文本,而终端编码不一致:
就会显示成:
������
查看文件编码:
file file.bin
转换编码后再看:
iconv -f GBK -t UTF-8 file.bin | strings
或临时切换终端编码为 GBK。
strings 默认只显示 长度 ≥ 4 的字符串,如果你加参数改小了:
strings -n 1 file
会输出大量零散字符,看起来像乱码。
✅ 建议:
strings -n 4 file
比如:
这些内容碰巧包含可打印字符,但无意义。
✅ 可配合 grep 使用:
strings file | grep -i password
对跨平台二进制(如 ARM vs x86),strings 仍能提取 ASCII,一般不会乱码,但内容可能不完整。
strings显示“乱码”大多是正常的,因为它本来就不是用来读全文的;真正乱码通常是编码不一致。
如果你愿意,可以:
strings 输出我可以帮你具体判断。