有没有办法扩展 iconv 以支持更多编码?

有没有办法扩展 iconv 以支持更多编码?

iconv命令用于从一种字符编码转换为另一种字符编码。您可以使用 来查看它支持的所有编码的列表iconv -l

有没有办法iconv通过添加更多支持的编码来扩展它?如果是这样,可以发布这样的扩展吗?或者我唯一的选择是更改代码并完成iconv自己的开发过程?

答案1

如果您的iconv实现来自 GNU C 库,那么是的,它是可扩展的,有几种方式。

在 GNU C 库中,字符集处理是在可加载模块中实现的,您可以.so/usr/lib/gconv(或/usr/lib/x86_64-linux-gnu/gconv,或lib系统使用的任何目录)中找到这些文件。哪个字符集由哪个模块处理,在文本文件/usr/lib/gconv/gconv-modules.根据您的要求,您可以添加新模块和/或新定义。在这两种情况下,您都需要使用 来更新缓存iconvconfig。您无需将更改集成到 C 库本身中即可分发它们。

上面链接的手册提供了更多详细信息。

其他实现iconv也可以是可扩展的;如果您不使用 GNU C 库,请参阅本地文档。

答案2

假设您使用的是 Linux 和glibc,您可以通过创建一个或多个可共享的可加载gconv模块来支持其他编码。

模块的默认位置gconv/usr/lib64/gconv64 位系统和/usr/lib/gconv32 位系统。

有关基本信息,请参阅iconv(1)iconv(3)和联机帮助页。iconvconfig(8)

https://www.gnu.org/software/libc/manual/html_node/glibc-iconv-Implementation.html了解详情。提供了转换函数框架的示例。查看glibc源代码以获取工作示例。

相关内容