- 论坛徽章:
- 0
|
#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);
} |
输出
tempname@ubuntu:~$ ./a.out
1
2
3
ret = -1
errno == EILSEQ
iconv error
1
2
3
ret = -1
errno == EILSEQ
iconv error
1
2
3
ret = -1
errno == EILSEQ
iconv error
buf = 浣犲ソ, buffer = 你好, buffer1 = 塑料布
str1是& # x 5851;& # x 6599;& # x 5E03;
buffer1是& # x 5851;& # x 6599;& # x 5E03;
去掉中间的空格
[ 本帖最后由 tempname_cn 于 2008-10-9 16:19 编辑 ] |
|