<<戻る

2004年11月25日

iconv関数

[s-okita@localhost c]$ cat iconv_test.c
/* iconv_test.c */
#include 
#include 
#include 

int main(int argc, char *argv[]) {

        iconv_t cd;
        char *test_data = "、ロ、イ";
        char src_buf[128];
        char dest_buf[128];

        char *s = src_buf;
        char *d = dest_buf;

        size_t srcLen = sizeof(src_buf);
        size_t destLen = sizeof(dest_buf);

        memset(src_buf, sizeof(src_buf), 0);
        memset(dest_buf, sizeof(dest_buf), 0);

        memcpy(src_buf, test_data, strlen(test_data) + 1);

        printf("%d\n", strlen(test_data));
        printf("%s\n", src_buf);

        /* from EUC-JP to SHIFT_JIS */
        printf("iconv start\n");
        cd = iconv_open("SHIFT_JIS", "EUC-JP");

        printf("convert\n");
        iconv(cd, &s, &srcLen, &d, &destLen);

        printf("dest_buf:%s\n", dest_buf);

        printf("end\n");
        iconv_close(cd);

        return 0;
}

[s-okita@localhost c]$ gcc -Wall -O2 -o iconv_test iconv_test.c

terminalをEUC-JP表示にして実行してみます。
[s-okita@localhost c]$ ./iconv_test
4
ほげ
iconv start
convert
dest_buf:?
end

次に、terminalをSHIFT_JIS表示にして実行してみます。

[s-okita@localhost c]$ ./iconv_test
4
、ロ、イ
iconv start
convert
dest_buf:ほげ
end

上記が正常に動作しているのでiconv関数での国際化対応に成功しています。