温馨提示×

linux strings能看编码吗

小樊
48
2026-09-11 09:57:47
栏目: 智能运维

简短回答:strings 本身不能“判断/显示编码”,它只是按字节提取可打印字符序列,默认按 ASCII(或扩展 ASCII)看待。

下面说清楚几点:

1. strings 做了什么

strings 做的事情是:

  • 扫描二进制或文本文件
  • 找出连续的可打印字节
  • 原样输出这些字节

不解析编码、不转换编码、不告诉你这是什么编码

例如:

strings file.bin

如果文件里是 UTF-8 中文,而你的终端是 UTF-8,strings 可能“看起来正常”,但那是因为:

  • 字节没被转换
  • 你的终端自己按 UTF-8 显示了

2. strings 与编码的关系

  • ASCII 内容:完全没问题
  • UTF-8 中文:通常能显示(前提是终端编码一致)
  • GBK / BIG5 / Shift-JIS 等
    • strings 照样把字节打出来
    • 但你会看到“乱码”,因为它不会转码

3. 相关常用选项

strings -n 6 file      # 最少 6 个可打印字符才输出
strings -e l file      # 16-bit little endian
strings -e b file      # 16-bit big endian
strings -e s file      # 7-bit ASCII(默认)

这些是指字符宽度/字节序,不是“编码识别”。

4. 如果你想知道“是什么编码”

strings 不行,要用别的工具:

file file.bin
# 示例:UTF-8 Unicode text

enca file.bin
# 猜测编码(支持多语言)

iconv -l
# 查看支持的编码

chardet file.txt
# Python 工具,检测编码

5. 如果你想知道“里面有没有某编码的字符串”

可以配合:

strings file | iconv -f UTF-8 -t UTF-8 -c

或提取后进一步处理。


一句话总结

strings 不能看编码,只能“把看起来像字符串的字节打印出来”;
编码识别要用 file / enca / chardet 等工具。

如果你有具体文件或场景(比如 ELF、日志、二进制协议),我可以给你更合适的命令。

0