温馨提示×

linux strings如何指定编码

小樊
43
2026-09-05 13:56:08
栏目: 智能运维

在 Linux 下,strings 命令默认是按 ASCII(及一些扩展编码) 来提取可打印字符串的,它本身不能像 iconv 那样灵活指定任意编码,但可以通过一些方式和参数间接处理编码问题。

下面分情况说明:


一、strings 自身的编码相关选项

1. -e / --encoding:指定字符编码类型

strings 支持几种内置编码格式

strings -e S file        # 7-bit ASCII(默认)
strings -e B file        # 16-bit Big Endian
strings -e L file        # 16-bit Little Endian
strings -e s file        # 8-bit 单字节编码(类似 ASCII)

示例(UTF-16LE 文件):

strings -e L utf16.txt

⚠️ 注意:

  • 这里的编码只支持 ASCII / UTF-16,不支持 UTF-8、GBK、Shift-JIS 等
  • UTF-8 本质是 ASCII 超集,strings 默认就能识别其中的 ASCII 部分

二、非 ASCII 编码(如 GBK、UTF-8、Shift-JIS)怎么办?

✅ 推荐做法:iconv + strings

先转换编码,再提取字符串:

iconv -f GBK -t UTF-8 file.bin | strings

或反过来:

iconv -f UTF-16LE -t UTF-8 file.bin | strings

三、从二进制中提取 UTF-8 字符串

UTF-8 中的 ASCII 字符 strings 能直接识别:

strings binary_file

如果 UTF-8 中文显示乱码,通常是终端编码问题:

export LANG=en_US.UTF-8
strings binary_file

四、提取多字节编码字符串(如 UTF-16)

如果是 UTF-16 文件:

strings -e L file.utf16   # Little Endian
strings -e B file.utf16   # Big Endian

五、常见组合示例

1️⃣ 从 GBK 编码二进制中提取中文

iconv -f GBK -t UTF-8 dump.bin | strings

2️⃣ 从 UTF-16LE 可执行文件中提取

strings -e L program.exe

3️⃣ 只提取长度 ≥ 6 的字符串

strings -n 6 file

六、总结

需求 方法
ASCII strings
UTF-16 strings -e L/B
GBK / Shift-JIS iconv + strings
UTF-8 strings(确保终端 UTF-8)

如果你有具体文件类型或编码(比如 Windows exe、GB2312、日文 Shift-JIS),可以告诉我,我可以给你精确命令。

0