温馨提示×

如何查找linux strings乱码原因

小樊
43
2026-09-23 18:41:03
栏目: 智能运维

在 Linux 下使用 strings 命令时出现“乱码”,通常不是 strings 本身坏了,而是数据来源、编码或参数使用不匹配。下面按“原因 → 排查方法 → 解决办法”的系统思路说明。


一、先确认:你看到的“乱码”是什么

strings 默认只提取可打印字符序列(默认长度 ≥ 4),常见“乱码”现象包括:

  1. 中文变成 \xe4\xb8\xad 或方块
  2. 输出全是 @#%&* 或无意义字符
  3. 二进制里本该有字符串却看不到
  4. 明明有中文,strings 没显示

二、常见原因与排查方法

1️⃣ 文件不是文本,而是二进制

原因

  • strings 用于二进制文件(ELF、so、core、磁盘镜像)
  • 文本文件一般没必要用 strings

排查

file yourfile
  • 如果是 ELF、data、executable → 正常
  • 如果是 UTF-8 text → 直接用 cat / less

2️⃣ 字符编码不匹配(最常见)

原因

  • 文件是 GBK / GB18030
  • 你的终端是 UTF-8
  • strings 原样输出字节,终端解释错误 → 乱码

排查编码

file -i yourfile
# 或
enca yourfile

解决办法

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

或先转码:

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

3️⃣ 最小字符串长度设置不当

原因

  • 默认 -n 4
  • 中文 3 字节,短字符串被过滤

现象

  • 中文看不到
  • 只有英文单词

解决

strings -n 3 yourfile
strings -n 1 yourfile

4️⃣ 非 ASCII 字符串被忽略

原因

  • strings 默认只认可打印 ASCII
  • 中文、特殊编码不在范围内

解决(提取更多内容)

strings -e S yourfile   # 16-bit
strings -e L yourfile   # 32-bit little endian
strings -e B yourfile   # 32-bit big endian

5️⃣ 文件被压缩 / 加密 / 混淆

现象

  • 几乎无可读字符串
  • 全是随机字节

排查

file yourfile
binwalk yourfile

6️⃣ 终端 / Locale 问题

排查

locale
echo $LANG

推荐

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

三、实用排查流程(推荐)

file yourfile
file -i yourfile
strings -n 3 yourfile | head
strings -n 3 yourfile | iconv -f gbk -t utf-8

四、示例对照

✅ 正常二进制:

strings /bin/ls

❌ GBK 乱码:

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

五、如果你愿意

你可以直接贴:

  • file yourfile 输出
  • 一段 strings 输出截图或文本

我可以精准判断是编码、参数还是文件类型问题。

0 踩