iconv -l 是最直接可靠的方式,列出系统 iconv 库支持的所有编码别名(含大小写变体),约150+行,可脚本解析;locale -a 和 file -i/enca 均不适用于查询编码支持列表。

iconv -l 是最直接、最可靠的方式,它列出系统当前 iconv 库支持的所有编码别名(包括大小写变体和别名映射),无需安装额外工具,且结果可被脚本直接解析。
用 iconv -l 查看全部可用编码
这个命令输出的是 iconv 实现所支持的编码列表,不是系统“默认启用”的编码,而是所有能参与转码的编码名称。实际输出约 150+ 行,含大量别名(如 UTF-8、utf8、UTF8 都指向同一实现)。
- 直接运行:
iconv -l - 过滤查看常见中文相关编码:
iconv -l | grep -i -E "(gb|big5|utf|hk|cn)" - 导出为文件方便搜索:
iconv -l > encodings.txt
注意:输出中每行是一个独立编码名,但部分名称带括号说明(如 CP1252//),括号内是别名或注释,真正可用的是前面的主名称;// 结尾的表示该编码支持无 BOM 的变体。
为什么不用 locale -a?
locale -a 列出的是系统已生成的 locale 配置(如 zh_CN.UTF-8、en_US.ISO-8859-1),它反映的是语言+编码的组合是否被预编译进系统,而非编码本身是否可用。一个编码(如 GBK)可能没对应 locale,但仍能被 iconv 正常转码。
- 想确认某个 locale 是否存在(比如要设置
LANG=zh_CN.GBK)→ 查locale -a - 想确认能否用
iconv把文件从 GBK 转 UTF-8 → 查iconv -l是否含GBK或CP936
locale -a 输出受 /usr/lib/locale/ 或 /usr/share/i18n/locales/ 影响,而 iconv -l 只取决于 glibc 的 iconv 模块,更底层、更稳定。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
file -i 和 enca 不适合查“支持列表”
这两个工具是用于**检测单个文件的编码**,不是枚举系统能力:
-
file -i filename输出类似charset=utf-8,但它只告诉你这个文件被识别成什么,不提供编码全集 -
enca filename会尝试匹配有限的编码子集(主要针对东亚文本),且依赖语言参数(如-L zh),它内部硬编码了几十种候选编码,不能代表系统全部能力
它们的结果是推测值,有误判可能;而 iconv -l 是确定性清单,无歧义。
容易忽略的细节:编码名大小写与别名
iconv 对编码名大小写不敏感,但脚本中最好统一用大写加下划线风格(glibc 推荐格式),例如:
- 用
UTF-8,不用utf8(虽然后者通常也通,但某些旧版iconv可能拒绝) -
GB18030和GB2312都存在,但GBK在列表中显示为CP936(Microsoft 代码页名),这是实际应使用的名称 -
ISO-8859-1和ISO8859-1等价,但Latin1不在标准列表里——别凭经验写,以iconv -l输出为准
真正要用某个编码做转换时,建议先从 iconv -l 输出里复制粘贴编码名,避免手误或别名不兼容。










