温馨提示×

linux strings输出乱码怎么办

小樊
45
2026-07-07 04:43:06
栏目: 智能运维

在 Linux 下使用 strings 命令输出出现乱码,通常不是 strings 本身坏了,而是编码、对象类型或参数使用不当导致的。下面按常见原因给你一个排查和解决清单。


一、最常见原因与解决办法

1️⃣ 不是真正的字符串(而是二进制数据)

strings 默认只提取可打印字符序列,但:

  • 二进制文件里有很多非文本数据
  • 某些“字符串”其实是机器码、地址、压缩数据

解决

strings -n 6 yourfile
  • -n 6:只显示长度 ≥ 6 的字符串(过滤掉噪声)
  • 数值越大,越干净

2️⃣ 文件编码不是 UTF-8(中文乱码)

如果文件是:

  • GBK
  • GB2312
  • ISO-8859-1

而你的终端是 UTF-8,就会乱码。

解决:先转码再 strings

iconv -f gbk -t utf-8 yourfile | strings

或先查看编码:

file yourfile

3️⃣ 终端编码不匹配

检查终端编码:

locale

✅ 推荐设置:

export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

然后重新执行 strings


4️⃣ 你查看的不是“文本段”

strings 默认只扫描:

  • ELF 的 .rodata.data 等段

强制扫描整个文件

strings -a yourfile

或:

strings -a -n 6 yourfile

5️⃣ 文件是压缩/加密/混淆过的

例如:

  • UPX 压缩
  • 加壳
  • 加密 payload

解决

  • 先脱壳 / 解密
  • 或用 binwalk 分析:
binwalk yourfile

6️⃣ 输出被终端“误解”

有时不是乱码,而是:

  • 控制字符
  • 颜色代码
  • 非 ASCII 字符

过滤不可见字符

strings yourfile | tr -cd '[:print:]\n'

二、推荐的标准用法(最稳)

strings -a -n 6 yourfile

如果还有中文乱码:

iconv -f gbk -t utf-8 yourfile | strings -a -n 6

三、快速判断问题在哪

现象 原因
全是 ^@@\x 二进制噪声
中文变成 ?? 编码不匹配
输出像随机字符 非字符串数据
只有少量内容 扫描范围太小

四、如果你愿意,我可以更精确帮你

你可以直接贴:

  1. 文件类型(file yourfile
  2. 乱码示例(几行)
  3. 使用场景(ELF?日志?固件?)

我可以给你针对性的 strings 参数或替代方案(比如 xxdhexdumpgrep)。

0