由於版權的問題,FreeBSD 下的 iconv 2.0 大約是 2000 年的程式, 也就不能 GNU libiconv 所擁有的轉換表, 在使用上也是有許多缺點。
安裝 converters/iconv。
基本的用法有:
% iconv -f gb2312 -t big5 file.gb > file.big5
以下是寫 C 程式的小範例:
#include <stdio.h> #include "iconv.h" void my_iconv(char *fromcode, char *tocode, char *inbuf, char *outbuf) { iconv_t cd; size_t status; char *inbufp, *outbufp; size_t inbytesleft, outbytesleft; inbytesleft = strlen(inbuf); outbytesleft = inbytesleft * 5; cd = iconv_open(tocode, fromcode); if ((iconv_t) (-1) == cd) { perror ("Error at iconv_open"); exit(1); } inbufp = inbuf; outbufp = outbuf; status = iconv (cd, &inbufp, &inbytesleft, &outbufp, &outbytesleft); if (status == (size_t) -1) { perror ("Error at my_iconv"); } status = iconv_close(cd); if (status == (int) -1) { perror ("Error at iconv_close"); } return; } int main(int argc, char* argv[]) { char *inbuf = "加上"; char *outbuf = (char *) malloc(sizeof (char) * strlen(inbuf)*5); my_iconv("Big5", "GBK", inbuf, outbuf); printf("%s -> %s\n", inbuf, outbuf); free(outbuf); }
以下是編譯的方式:
gcc -I/usr/local/include -L/usr/local/lib -liconv -o my_iconv my_iconv.c