- 论坛徽章:
- 0
|
#include </home/test/iconv-1.8/lib/include/iconv.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <malloc.h>
int main()
{
char tmputf8[10] = "test";
char *inbuf_utf8 = tmp;
//char tmpout[50] ={0};//位置1
unsigned int ilen = strlen(inbuf_utf8);
char tmpgbk[50] ={0};//位置2
char *outbuf_gbk = tmpout;
unsigned int olen = 50;
printf("utf8:%s\n",inbuf_utf8);
printf("instr.len:%d\n",ilen);
iconv_t cd;
cd = iconv_open ("GBK","UTF-8");
if(cd == (iconv_t)(-1))
{
printf("iconv_open error for %s\n",strerror(errno));
}
iconv(cd,NULL,NULL,NULL,NULL);
int ret = iconv(cd,&inbuf_utf8,(size_t*)&ilen,&outbuf_gbk,(size_t*)&olen);
iconv_close(cd);
if( ret < 0 ){
printf("iconv_conv error for %s\n",strerror(errno));
}else{
printf("iconv_conv succeed for %d\n",ret);
}
printf("utf8:%s\n",inbuf_utf8);
printf("instr.len:%d\n",ilen);
printf("gbk:%s\n",outbuf_gbk);
printf("gbkstr.len:%d\n",olen);
printf("gbkstr.len:%d\n",strlen(outbuf_gbk));
} |
编译环境:libiconv1.8,gcc 3.2.3,2.6.9的x86_64的linux
遇到的问题:将位置1注销,iconv的返回值为-1,错误信息:Invalid or incomplete multibyte or wide character,但iconv能将utf-8转换成gbk,而且olen值为32
将位置2注销,iconv返回值为0,但是iconv不能将utf-8转换成gbk,但是olen值为4.
请各位看看为什么会出现这种情况?我该怎么将utf-8转换成gbk? |
|