由於版權的問題,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