在 Linux 下使用 strings 命令时看到“乱码”,通常不是 strings 本身坏了,而是数据来源或字符编码不符合预期。常见原因和对应解释如下:
strings 的作用是从二进制文件中提取“可打印字符串”。
strings 只按“连续可打印字符”截取✅ 这是正常现象,不是错误。
如果你看到:
䏿–‡
这通常是 UTF-8 被当成 Latin-1 显示。
解决:
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
或临时查看:
strings file | iconv -f UTF-8 -t UTF-8
strings 默认按 ASCII 提取,中文会乱。
解决:
strings file | iconv -f GBK -t UTF-8
strings 默认只显示 长度 ≥ 4 的字符串:
strings file
短字符串被忽略,剩下的上下文断裂 → 看似乱码。
可调小:
strings -n 1 file
例如:
这些区域本来就不是给人看的。
Windows 程序常使用 UTF-16:
H\0e\0l\0l\0o\0
strings 默认看不懂。
解决:
strings -e l file # little-endian UTF-16
strings -e b file # big-endian
这种情况下“乱码”是设计目的。
file yourfile
hexdump -C yourfile | head
locale
strings -n 1 yourfile | head
如果你愿意,可以:
strings 输出我可以更精确地告诉你“为什么乱、怎么看”。