在 Linux 下,strings 命令默认是按 ASCII(及一些扩展编码) 来提取可打印字符串的,它本身不能像 iconv 那样灵活指定任意编码,但可以通过一些方式和参数间接处理编码问题。
下面分情况说明:
strings 自身的编码相关选项-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
⚠️ 注意:
strings 默认就能识别其中的 ASCII 部分iconv + strings先转换编码,再提取字符串:
iconv -f GBK -t UTF-8 file.bin | strings
或反过来:
iconv -f UTF-16LE -t UTF-8 file.bin | strings
UTF-8 中的 ASCII 字符 strings 能直接识别:
strings binary_file
如果 UTF-8 中文显示乱码,通常是终端编码问题:
export LANG=en_US.UTF-8
strings binary_file
如果是 UTF-16 文件:
strings -e L file.utf16 # Little Endian
strings -e B file.utf16 # Big Endian
iconv -f GBK -t UTF-8 dump.bin | strings
strings -e L program.exe
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),可以告诉我,我可以给你精确命令。