程式語言 - Visual C++ 6.0 - UTF-8轉BIG-5



參考資訊:
https://www.monster.com.tw/archives/811
http://manpages.ubuntu.com/manpages/bionic/zh_TW/man3/iconv_open.3.html

main.c

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <iconv.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>

int main(int argc, char **argv)
{
    int x;
    iconv_t cd;
    char in_buf[255] = {0};
    char out_buf[255] = {0};
    char *sin = in_buf;
    char *sout = out_buf;
    size_t in_len = 0;
    size_t out_len = sizeof(out_buf);

    cd = iconv_open("big5", "utf-8");
    if (cd == -1)
    {
        printf("failed to open iconv !\n");
        return -1;
    }

    int fd = open("test.txt", O_RDONLY);
    in_len = read(fd, in_buf, sizeof(in_buf));
    close(fd);

    printf("utf8: ");
    for (x = 0; x < in_len; x++)
    {
        printf("0x%x ", (unsigned char)in_buf[x]);
    }
    printf("\n");

    iconv(cd, &sin, &in_len, &sout, &out_len);
    iconv_close(cd);

    printf("big5: ");
    out_len = strlen(out_buf);
    for (x = 0; x < out_len; x++)
    {
        printf("0x%x ", (unsigned char)out_buf[x]);
    }
    printf("\n");
    return 0;
}

test.txt

司徒

執行結果

$ ./test 
    utf8: 0xe5 0x8f 0xb8 0xe5 0xbe 0x92 0xa 
    big5: 0xa5 0x71 0xae 0x7b 0xa