Chapter 11. 中文轉碼軟體

Table of Contents
11.1. iconv
11.2. cn2jp - 在中文和日文間的編碼轉移函式庫
11.3. autoconvert - 智慧的中文編碼轉換
11.4. c2t - 轉譯 GB/Big5 編碼成拼音
11.5. hc - 漢字轉換器,在 GB 和 Big5 編碼間轉換
11.6. gb2jis - GB漢字轉換JIS漢字
11.7. hztty - 在 GB Big5 和 HZ tty 中轉換
11.8. jis2gb - JIS漢字轉換GB漢字
11.9. pycodec - 中文碼/萬國碼轉換程式
11.10. fzzdxfw - 方正中等線繁體

11.1. iconv

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

WWW: http://www.dante.net/staff/konstantin/FreeBSD/iconv/