173806613 发表于 2013-2-4 15:48:26

linux utf8与gb2312转换函数

#includeiostream>#includeiconv.h>using namespace std;int utf8togb2312(const char *sourcebuf,size_t sourcelen,char *destbuf,size_t destlen){iconv_t cd;if( (cd = iconv_open("gb2312","utf-8")) ==0 )    return -1;memset(destbuf,0,destlen);const char **source = &sourcebuf;char **dest = &destbuf;if(-1 == iconv(cd,const_cast<char**>(source),&sourcelen,dest,&destlen))    return -1;iconv_close(cd);return 0;}int gb2312toutf8(const char *sourcebuf,size_t sourcelen,char *destbuf,size_t destlen){iconv_t cd;if( (cd = iconv_open("utf-8","gb2312")) ==0 )    return -1;memset(destbuf,0,destlen);const char **source = &sourcebuf;char **dest = &destbuf;if(-1 == iconv(cd,const_cast<char**>(source),&sourcelen,dest,&destlen))    return -1;iconv_close(cd);return 0;}int main(){FILE *fp = fopen("love.txt","r");if(fp == NULL)    {      cout"open file faiulre"endl;      return 1;    }char line;memset(line,0,80);if( NULL == fgets(line,80,fp))    {      cout"read file failure"endl;      return 2;    }char dest_gb2312;utf8togb2312(line,strlen(line),dest_gb2312,80);cout"before convert(utf-8): "lineendl;cout"after convert(gb2312): "dest_gb2312endl;coutendlendl;char dest_utf8;gb2312toutf8(dest_gb2312,strlen(dest_gb2312),dest_utf8,80);cout"before convert(gb2312)"dest_gb2312endl;cout"after convert(utf-8)"dest_utf8endl;    return 0;}
页: [1]
查看完整版本: linux utf8与gb2312转换函数