2 调用函数iconv(iconv_t cd, char** inbuf, size_t* inleft, char** outbuf, size_t* outleft),函数参 数说明如下
3 最后调用函数iconv_close(iconv_t cd)。
- iconv_t cd : 【I 】iconv_open函数的返回值
- char** inbuf : 【I/O】转换对象。设置为一个字符指针的地址,这个字符指针指向需要变换的字符串,需要注意的是这个字符指针的值是会被改变的。
- size_t* inleft : 【I/O】设置转换对象的长度。
- char** outbuf : 【I/O】转换目标。设置为一个字符指针的地址,这个字符指针指向一个存放被转换后字符串的buffer。
- size_t* outleft: 【I/O】设置转换目标buffer的长度。
下面是一个例子。
点击(此处)折叠或打开
- #include <iconv.h>
- #include <stdio.h>
- #include <string.h>
- #include <errno.h>
- #include <stdlib.h>
- int main(int argc, char *argv[ ])
- {
- FILE* pfUtf8 = NULL;
- FILE* pfSjis = NULL;
- char acLine[1024];
- char acOut[1024];
- char* pcIn, *pcOut;
- iconv_t ct;
- size_t inleft = 0, outleft = 0;
- if (argc != 3)
- {
- printf("usage:./a.out infile outfile.\n");
- exit(1);
- }
- pfUtf8 = fopen(argv[1], "r+");
- if (pfUtf8 == NULL)
- {
- printf("file(%s) open error.(%s)\n", argv[1], strerror(errno));
- exit(2);
- }
- pfSjis = fopen(argv[2], "w+");
- if (pfSjis == NULL)
- {
- printf("file(%s) open error.(%s)\n", argv[2], strerror(errno));
- exit(3);
- }
- ct = iconv_open("SJIS", "UTF8");
- if (ct == -1)
- {
- printf("iconv_open error.(%s)\n", strerror(errno));
- exit(4);
- }
- while (fgets(acLine, sizeof(acLine), pfUtf8))
- {
- memset(acOut, 0, sizeof(acOut));
- inleft = strlen(acLine);
- outleft = sizeof(acOut);
- pcIn = acLine;
- pcOut = acOut;
-
- printf("acLine = %s\n", acLine);
- if (iconv(ct, &pcIn, &inleft, &pcOut, &outleft) == -1)
- {
- printf("iconv error(%s).(%s)\n", pcIn, strerror(errno));
- exit(5);
- }
- memset(acLine, 0, sizeof(acLine));
- fputs(acOut, pfSjis);
- }
- iconv_close(ct);
- fclose(pfUtf8);
- fclose(pfSjis);
- return 0;
- }