strings 在 Debian(或其他 Linux)上输出“乱码”,通常不是 strings 本身坏了,而是它看到的内容本来就不是可读文本,或者编码/解释方式不对。常见原因如下:
strings 默认只提取可打印字符序列(默认长度 ≥ 4,且多为 ASCII)。
如果文件是:
.gz、.xz、.zst)里面即使有“字节”,也常常不是人类语言,看起来就是乱码。
✅ 这是正常现象
strings 默认按 单字节 ASCII 处理。
中文、日文等 UTF-8 是多字节:
ä½ å¥½
看起来像乱码,其实是 UTF-8 被当成 ASCII 拆开了。
strings -e S file
或
strings -n 1 file | iconv -f UTF-8 -t UTF-8 -c
更推荐用:
strings -e l # 16-bit little endian
strings -e b # 16-bit big endian
Windows 程序常使用 UTF-16:
H\0e\0l\0l\0o\0
strings 默认看不到。
strings -e l file # UTF-16LE
strings -e b file # UTF-16BE
比如:
终端用 UTF-8 显示就会乱码。
file file
iconv -f GBK -t UTF-8 file
即使 strings 输出正确,终端错也会乱。
检查:
locale
推荐:
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
例如:
strings /dev/sda
或
strings core
这些本来就是脏数据。
file 文件
hexdump -C 文件 | head
如果 hexdump 都看不出文字,strings 乱码就正常。
strings乱码 ≠ bug,通常是:非文本数据、编码不对、或字符宽度不对
如果你愿意,可以:
hexdump -C | head我可以帮你精确判断。