7.5kw电机防爆控制箱:Linux下UTF-8和GB2312互相转换的函数

来源:百度文库 编辑:偶看新闻 时间:2024/06/12 13:14:08

#include
#include

#include

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,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,source,&sourcelen,dest,&destlen))
    return -1;
  iconv_close(cd);
  return 0;
  
}

int main()
{
  char line[80];
  char dest_gb2312[200];
  char dest_utf8[200];
  int ret ;
  FILE *fp = fopen("love.txt","r");
  if(fp == NULL)
    {
      printf("oh my dear,open fail...\n");
      return 1;
    }

  memset(line,0,80);
  if( NULL == fgets(line,80,fp))
    {
      printf("oh fgets fail...\n");
      return 2;
    }
printf( "----- :%s\n",line );


ret  = gb2312toutf8(line,strlen(line),dest_gb2312,200);
 // ret  = gb2312toutf8(dest_gb2312,strlen(dest_gb2312),dest_utf8,80);
  printf( "ret=%d\n\n\n",ret);
  printf( "gb2312:%s\n",line );
  printf( " utf-8:%s\n\n\n\n\n\n", dest_gb2312 );

  ret  = utf8togb2312(dest_gb2312,strlen(dest_gb2312),dest_utf8,200);
 printf( "ret=%d\n\n\n ",ret);
 printf( " utf-8:%s\n ",dest_gb2312);
 printf( "gb2312:%s\n ",dest_utf8);


    return 0;
}

 

注意:目标字符串的长度应该要加大,否则调用的时候返回值是-1 ,^ - ^ oddy