在 Debian(以及一般 Linux)世界里,**“strings 编码”**通常指的是两件事之一:
strings 命令输出的文本编码下面分别说明,并给出如何解读和正确处理的方法。
strings 命令本身输出的编码strings 是什么strings 用来从一个二进制文件(可执行文件、库、.deb 包内数据等)中提取可打印字符序列。
strings /bin/ls
strings 不会自动检测编码LANG, LC_ALL)常见情况:
(1)先看 locale
locale
若不是 UTF-8,建议:
export LANG=en_US.UTF-8
(2)判断二进制中字符串编码
file -i binary_file
或用:
strings binary | iconv -f UTF-8 -t UTF-8 -c | head
(3)若怀疑非 UTF-8 例如 GBK:
strings binary | iconv -f GBK -t UTF-8
在 Debian 打包和程序中,“strings”常指:
const char *msg = "中文";
必须是 UTF-8 源文件.po 文件编码Debian 国际化标准:
Content-Type: text/plain; charset=UTF-8
查看:
file -i po/zh_CN.po
.deb 包中的字符串control, changelog)必须是 UTF-8dpkg-deb -e package.deb
cat DEBIAN/control
| 场景 | 原因 | 解决 |
|---|---|---|
strings 输出乱码 |
非 UTF-8 | iconv 转换 |
| po 文件乱码 | 编码声明错误 | 改为 UTF-8 |
| man / 帮助中文乱码 | locale 不对 | LANG=zh_CN.UTF-8 |
| 老程序中文乱码 | GBK 编码 | iconv -f GBK |
# 1. 确认环境
locale
# 2. 提取字符串
strings program | head
# 3. 尝试 UTF-8
strings program | iconv -f UTF-8 -t UTF-8 -c
# 4. 不确定编码时
strings program | iconv -f GBK -t UTF-8
Debian 下的 strings 编码,本质是“二进制或资源文件里文本的字符集”;默认应按 UTF-8 解读,乱码时用
locale+iconv定位并转换即可。
如果你有具体文件或命令输出,可以贴出来,我可以帮你精确判断是哪种编码。