#include <stdio.h> #include <stdlib.h> #include <string.h> #include <iconv.h> #include <errno.h> int Convert(char* encFrom, char* encTo, const char* in, int in_len, char* out, int out_len) { char* sin, *sout; int ret; iconv_t c_pt; printf("1\n"); if((c_pt = iconv_open(encTo, encFrom)) == (iconv_t)-1) { printf("c_pt == -1\n"); return -1; } iconv(c_pt, NULL, NULL, NULL, NULL); sin = (char*)in; sout = (char*)out; printf("2\n"); ret = iconv(c_pt, &sin, (size_t*)&in_len, &sout, (size_t*)&out_len); printf("3\n"); printf("ret = %d\n", ret); if(ret == (size_t)-1) { if(errno == E2BIG) printf("errno == E2BIG\n"); if(errno == EILSEQ) printf("errno == EILSEQ\n"); if(errno == EINVAL) printf("errno == EINVAL\n"); iconv_close(c_pt); printf("iconv error\n"); return -1; } iconv_close(c_pt); return 1; } int main() { char buf[200]; char buffer[200]; char buffer1[200]; char* str = "你好"; char* str1 = "塑料布"; memset(buf, '\0', sizeof(buf)); memset(buffer, '\0', sizeof(buffer)); memset(buffer1, '\0', sizeof(buffer1)); Convert("GB2312 ", "utf-8", str, strlen(str)+1, buf, sizeof(buf)); Convert("utf-8", "GB2312", buf, strlen(buf)+1, buffer, sizeof(buffer)); Convert("utf-8", "GB2312", str1, strlen(str1)+1, buffer1, sizeof(buffer1)); printf("buf = %s, buffer = %s, buffer1 = %s\n", buf, buffer, buffer1); } |
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |