strings
命令主要用于从二进制文件中提取可打印字符序列,虽然它本身不是专门用于检测编码的工具,但可以配合其他方法帮助识别文件编码格式。
strings filename
这会显示文件中所有至少4个字符长的可打印ASCII字符串。
更推荐先使用file
命令检测编码:
file -i filename
示例输出:
filename: text/plain; charset=utf-8
strings filename | iconv -f utf-8 -t utf-8 2>/dev/null
如果输出没有错误,可能是UTF-8编码。
strings -e l filename # 尝试小端UTF-16
strings -e b filename # 尝试大端UTF-16
安装enca:
sudo apt-get install enca # Debian/Ubuntu
sudo yum install enca # RHEL/CentOS
使用:
strings filename | enca -L zh_CN # 对于中文文本
od -N 4 -t x1 filename
查看开头是否有: - EF BB BF (UTF-8 BOM) - FE FF (UTF-16 BE BOM) - FF FE (UTF-16 LE BOM)
strings
默认只显示ASCII字符,对于非ASCII编码可能不显示完整内容file
或enca
命令对于专业的编码检测,建议使用:
- file -I
或 file --mime-encoding
- enca
- uchardet
- python-chardet
这些工具专门为编码检测设计,比strings
命令更准确可靠。