23,124
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#include <iconv.h>
#include <string.h>
int main()
{
iconv_t cd;
char instr[]="汉字";
char *inbuf;
char *outbuf;
char *outptr;
unsigned int insize=strlen(instr);
unsigned int outputbufsize=10;
unsigned int avail=outputbufsize;
unsigned int nconv;
FILE *pf;
inbuf=instr;
outbuf=(char *)malloc(outputbufsize);
outptr=outbuf;
memset(outbuf,'\0',outputbufsize);
cd=iconv_open("utf-8","gb2312"); //将字符串编码由gb2312转换为utf-8
if(cd==(iconv_t)-1)
{
printf("fail.\n");
}
nconv=iconv(cd,&inbuf,&insize,&outptr,&avail);
printf("%s\n",outbuf);
//write xml file
pf = fopen("test.xml","wb");
if(!pf)
return 0;
strcpy(buf, "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
fwrite(buf, 1, strlen(buf), pf);
memset(buf, 0, sizeof(buf));
sprintf(buf, "<Image FileName=\"test.xml\" OCRStatus=\"test\">\n");
fwrite(buf, 1, strlen(buf), pf);
memset(buf, 0, sizeof(buf));
sprintf(buf, "<Return Code =\"%d\">\n",res);
fwrite(buf, 1, strlen(buf), pf);
memset(buf, 0, sizeof(buf));
sprintf(buf,"\t<![CDATA[");
fwrite(buf, 1, strlen(buf), pf);
memset(buf, 0, sizeof(buf));
sprintf(buf,"%s",outbuf);
fwrite(buf, 1, strlen(buf), pf);
memset(buf, 0, sizeof(buf));
sprintf(buf, "\t]]>\n");
fwrite(buf, 1, strlen(buf), pf);
memset(buf, 0, sizeof(buf));
sprintf(buf, "</Return>\n");
fwrite(buf, 1, strlen(buf), pf);
memset(buf, 0, sizeof(buf));
sprintf (buf, "</Image>\n");
fwrite(buf, 1, strlen(buf), pf);
free(outbuf);
iconv_close(cd);
fclose(pf);
return 1;
}
int code_convert(char *from_charset,char *to_charset,char *inbuf,size_t inlen,char *outbuf,size_t outlen)
{
iconv_t cd;
char **pin = &inbuf;
char **pout = &outbuf;
cd = iconv_open(to_charset,from_charset);
if(cd==0) return -1;
memset(outbuf,0,outlen);
if(iconv(cd,pin,&inlen,pout,&outlen)==-1) return -1;
iconv_close(cd);
return 0;
}
/*UNICODE码转为GB2312码*/
int u2g(char *inbuf,size_t inlen,char *outbuf,size_t outlen)
{
return code_convert("utf-8","gb2312",inbuf,inlen,outbuf,outlen);
}
/*GB2312码转为UNICODE码*/
int g2u(char *inbuf,size_t inlen,char *outbuf,size_t outlen)
{
return code_convert("gb2312","utf-8",inbuf,inlen,outbuf,outlen);
}