如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
HYPERLINK"http://www.cppblog.com/woaidongmao/archive/2009/09/10/95869.html"怎样学习使用libiconv库libiconv库是一个基于GNU协议的开源库,主要是解决多语言编码处理转换等应用问题。怎样学习使用libiconv库?对于刚接触到人来说,这篇文章不妨去看一看,若已经用到过该库的人,在应用的过程中可能遇到一些问题,我们可以一起来探讨,我的联系方式是HYPERLINK"mailto:cnangel@gmail.com"cnangel@gmail.com。几个函数原型:iconv_ticonv_open(constchar*tocode,constchar*fromcode);size_ticonv(iconv_tcd,char**inbuf,size_t*inbytesleft,char**outbuf,size_t*outbytesleft);inticonv_close(iconv_tcd);其中:iconv_open是打开一个编码流,类似于打开一个编码管道(通道),出错则返回-1;iconv用于具体输入的转换,如果出错,则返回-1,否则返回0;iconv_close是关闭该管道(通道)。举个例子:#include<stdio.h>#include<string.h>#include<stdlib.h>#include<iconv.h>#defineOUTLEN255intcovert(char*,char*,char*,size_t,char*,size_t);intmain(intargc,char*argv[]){char*input="中国";size_tlen=strlen(input);char*output=(char*)malloc(OUTLEN);covert("UTF-8","GBK",input,len,output,OUTLEN);printf("%s\n",output);return0;}intcovert(char*desc,char*src,char*input,size_tilen,char*output,size_tolen){char**pin=&input;char**pout=&output;iconv_tcd=iconv_open(desc,src);if(cd==(iconv_t)-1){return-1;}memset(output,0,olen);if(iconv(cd,pin,&ilen,pout,&olen))return-1;iconv_close(cd);return0;}这里面covert函数就是用于将编码进行转换,其中要注意的地方是iconv函数的传递参数:1,iconv传递有5个参数;2,第3个参数和第5个参数一般是input和output实际分配的大小,一般是sizeof(type)*strlen(string);3,第4个参数是不能直接传递指针的地址,因为iconv函数能够改变指针的值,所以需要复制一份指针变量;如果对于大量需要转换的编码,上述函数covert不适合该方式,一是内存的限制不能一次调用,二是若分多次调用会频繁打开一个编码管道(通道),导致资源浪费,最好的办法还是拆开该函数根据情况使用。这里补充一下代码:translateSP.h:#ifndef__TRANSLATESP_H_#define__TRANSLATESP_H_#include<iconv.h>classTranslateSP{public:TranslateSP():i_cd(0){}TranslateSP(constchar*from_charset,constchar*to_charset){i_cd=iconv_open(to_charset,from_charset);if((iconv_t)-1==i_cd)printf("iconvopenerror!\n");}~TranslateSP(){if(i_cd)iconv_close(i_cd);}public:size_ttranslate(char*src,size_tsrcLen,char*desc,size_tdescLen);size_tconvert(constchar*from_charset,constchar*to_charset,char*src,size_tsrcLen,char*desc,size_tdescLen);private:iconv_ti_cd;};#endiftranslateSP.cpp:#include"translateSP.h"#defineMAX_LEN200size_