温馨提示×

debian strings输出乱码为何

小樊
44
2026-09-01 03:52:11
栏目: 智能运维

strings 在 Debian(或其他 Linux)上输出“乱码”,通常不是 strings 本身坏了,而是它看到的内容本来就不是可读文本,或者编码/解释方式不对。常见原因如下:


1. 文件里本来就没有 ASCII 字符串

strings 默认只提取可打印字符序列(默认长度 ≥ 4,且多为 ASCII)。

如果文件是:

  • 压缩数据(.gz.xz.zst
  • 加密数据
  • 二进制协议数据
  • 图片 / 音频 / 视频

里面即使有“字节”,也常常不是人类语言,看起来就是乱码。

✅ 这是正常现象


2. 字符串是 UTF-8 / 多字节编码

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

3. 宽字符 / Unicode(UTF-16)

Windows 程序常使用 UTF-16:

H\0e\0l\0l\0o\0

strings 默认看不到。

正确方式

strings -e l file   # UTF-16LE
strings -e b file   # UTF-16BE

4. 文件其实是文本,但编码不是 UTF-8

比如:

  • GBK
  • BIG5
  • ISO-8859-1

终端用 UTF-8 显示就会乱码。

检查编码

file file

转换

iconv -f GBK -t UTF-8 file

5. 终端编码不对

即使 strings 输出正确,终端错也会乱。

检查:

locale

推荐:

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

6. 你“看错了”对象

例如:

strings /dev/sda

strings core

这些本来就是脏数据。


快速判断方法

file 文件
hexdump -C 文件 | head

如果 hexdump 都看不出文字,strings 乱码就正常。


总结一句话

strings 乱码 ≠ bug,通常是:非文本数据、编码不对、或字符宽度不对

如果你愿意,可以:

  • 文件类型
  • 或贴一段 hexdump -C | head
  • 或说明你想从什么文件里提取什么

我可以帮你精确判断。

0