libiconv
翻译:兵不厌库
like.lib@gmail.com
China
2007-11-21
查看原文
http://www.gnu.org/software/libiconv/
介绍
由于历史原因,国际上的各国文字都是依赖于自己本国语言而编码的。后来,随着Internet的出现和各国之间逐渐频繁的文字交流(比如浏览国外的Web页面),编码之间的转换就显得非常重要。这时也出现了一个问题,很多字符在一种编码中出现而没有被另一种编码包含。为了解决这种编码带来的混乱,人们发明了Unicode编码。它是所有编码的超集,因此成为新的文本格式的默认编码,象XML。
尽管如此,很多计算机在当地仍然使用传统字符编码方式。有些程序,象邮件客户端和Web浏览器,必须能够在原编码方式和用户本地编码方式之间进行转换;还有一些程序,为了方便内部处理,内部用Unicode存储,当作I/O 操作时,需要在内部编码方式(Unicode)和外部展现的编码方式(传统编码)之间转换。
GNU libiconv就是一个实现上述两种应用的转换库。
细节
本库提供了iconv()的实现,应用于没有支持编码转换的系统。
支持以下编码方式:
l 欧洲语言
ASCII, ISO-8859-{1,2,3,4,5,7,9,10,13,14,15,16}, KOI8-R, KOI8-U, KOI8-RU, CP{1250,1251,1252,1253,1254,1257}, CP{850,866}, Mac{Roman,CentralEurope,Iceland,Croatian,Romania}, Mac{Cyrillic,Ukraine,Greek,Turkish}, Macintosh
l 犹太语言
ISO-8859-{6,8}, CP{1255,1256}, CP862, Mac{Hebrew,Arabic}
l 日语
EUC-JP, SHIFT_JIS, CP932, ISO-2022-JP, ISO-2022-JP-2, ISO-2022-JP-1
l 中文
EUC-CN, HZ, GBK, CP936, GB18030, EUC-TW, BIG5, CP950, BIG5-HKSCS, BIG5-HKSCS:2001, BIG5-HKSCS:1999, ISO-2022-CN, ISO-2022-CN-EXT
l 韩语
EUC-KR, CP949, ISO-2022-KR, JOHAB
l 亚美尼亚语
ARMSCII-8
l 亚美尼亚语
Georgian-Academy, Georgian-PS
l 塔吉克语
KOI8-T
l 哈萨克语
PT154
l 泰国语
ISO-8859-11, TIS-620, CP874, MacThai
l 老挝语
MuleLao-1, CP1133
l 越南语
VISCII, TCVN, CP1258
l 特殊平台
HP-ROMAN8, NEXTSTEP
l Full Unicode
UTF-8
UCS-2, UCS-2BE, UCS-2LE
UCS-4, UCS-4BE, UCS-4LE
UTF-16, UTF-16BE, UTF-16LE
UTF-32, UTF-32BE, UTF-32LE
UTF
-7
C99, JAVA
l Full Unicode, 按uint16_t/uint32_t (with machine dependent endianness and alignment)
UCS-2-INTERNAL, UCS-4-INTERNAL
l Locale dependent, 按char/wchar_t (with machine dependent endianness and alignment, and with OS and locale dependent semantics)
char, wchar_t
名称为空的编码方式等同于“char”:表示依赖本地的字符编码。
如果配置了选项--enable-extra-encodings
,还支持部分其它编码方式:
l 欧洲语言
CP{437,737,775,852,853,855,857,858,860,861,863,865,869,1125}
l 犹太语言
CP864
l 日语
EUC-JISX0213, Shift_JISX0213, ISO-2022-JP-3
l 中文
BIG5-2003 (experimental)
l 土库曼语
TDS565
l 特殊平台
ATARIST, RISCOS-LATIN1
通过与Unicode之间的转换,libiconv支持所有这些编码方式的任意转换。
安装
GNU包的常规安装:
$ ./configure --prefix=/usr/local
$ make
$ make install
第一次安装libiconv库后,强烈建议你重新编译和重新安装gettext,使它能使用libiconv强大的功能。
在非GUN/Linux系统上,只有gettext在libiconv之前生成和安装,采用iconv的程序才能支持国际化。也就是说,首先安装libiconv,libiconv和gettext之间的循环依赖关系,可通过生成、安装任一包来解决。
顺序1:libiconv -> gettext -> libiconv,或
顺序2:gettext -> libiconv -> gettext(支持共享库的系统,AIX除外)
记住,第二次生成包时,你需要运行"make distclean"来清除第一次生成时留下的痕迹。
这个库的生成、安装有两种模式。
² 库模式(library mode)。可工作在所有系统上,使用库文件libiconv.so和头文件<iconv.h>(两个文件通过“make install”安装)
使用这种模式,只需简单地#include <iconv.h>,然后使用函数。
自动配置包方式(autoconfiguring package)使用这种模式:
- 如果不使用automake,将m4/iconv.m4附加到你的aclocal.m4文件中;
- 如果使用automake,将m4/iconv.m4添加到你的m4 macro repository;
- 运用占位符@LIBICONV@(使用libtool创建链接,则为@LTLIBICONV@),将使用iconv函数的库文件和可执行文件添加到链接命令行中。如果使用automake,这些占位符的右边是*_LDADD。
注意,iconv.m4也是gettext包的一部分,安装在/usr/local/share/aclocal/iconv.m4。
² libc的插入/重载模式(libc plug/override mode)。仅工作在GNU/Linux、Solaris和OSF/1系统上。是一种在没有glibc时来获取较好的iconv支持的途径。
这种模式安装库文件preloadable_libiconv.so,通过选项LD_PRELOAD,来重载所有C语言库中的iconv*函数。
- GNU/Linux和Solaris系统:
$ export LD_PRELOAD=/usr/local/lib/preloadable_libiconv.so
- OSF/1系统:
$ export _RLD_LIST=/usr/local/lib/preloadable_libiconv.so:DEFAULT
程序的代码不需要修改,甚至不需要重新编译,仅仅设置环境变量LD_PRELOAD即可。
下载libiconv
libiconv在GNU镜像站点 的子目录/pub/gnu/libiconv/
找到
。
通过其他途径获取libiconv,请阅读怎样获取GNU软件。
最新发布版本是 http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.11.tar.gz
文档
下面列出了相关在线文档的链接。
iconv
程序
库函数
iconv_open.3.html
iconv.3.html
iconv_close.3.html
iconvctl.3.html