參考資訊:
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