![有没有办法扩展 iconv 以支持更多编码?](https://linux22.com/image/185640/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E6%89%A9%E5%B1%95%20iconv%20%E4%BB%A5%E6%94%AF%E6%8C%81%E6%9B%B4%E5%A4%9A%E7%BC%96%E7%A0%81%EF%BC%9F.png)
该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/gconv
64 位系统和/usr/lib/gconv
32 位系统。
有关基本信息,请参阅iconv(1)
、iconv(3)
和联机帮助页。iconvconfig(8)
看https://www.gnu.org/software/libc/manual/html_node/glibc-iconv-Implementation.html了解详情。提供了转换函数框架的示例。查看glibc
源代码以获取工作示例。