分享

gbk to uniconde

 guitarhua 2012-05-03
  1. #include <iostream>   
  2. #include <iconv.h>   
  3. using namespace std;   
  4.    
  5. string IConvert(const string &sInput)   
  6. {   
  7.    
  8.     string sOutput;   
  9.     char *pin = (char*)sInput.data();   
  10.     size_t inlen = sInput.length() * 4;   
  11.     size_t outlen = inlen;   
  12.     char *pout = new char[outlen];   
  13.     memset(pout, 0, outlen);   
  14.    
  15.     iconv_t cd = 0;   
  16.     if((cd = iconv_open("gbk""utf-8")) == (iconv_t)-1)   
  17.     {   
  18.         cout < "iconv open fail \n";   
  19.         return sOutput;   
  20.     }   
  21.    
  22.     // 不知道iconv内部是如何实现的,必须这样再进行一次赋值才不会出错   
  23.     char *pin1 = pin, *pout1 = pout;   
  24.     char **ppin = & pin1;   
  25.     char **ppout = & pout1;   
  26.     size_t inleft = inlen, outleft = outlen;   
  27.     if(iconv(cd, (const char**)ppin, &inleft, ppout, &outleft) == size_t(-1))   
  28.     {   
  29.         iconv_close(cd);   
  30.         cout < "convert fail\n" < errno < endl;   
  31.         return sOutput;   
  32.     }   
  33.     iconv_close(cd);   
  34.    
  35.     sOutput.assign(pout, outlen - outleft);   
  36.    
  37.     delete []pout;   
  38.    
  39.     return sOutput;   
  40. };   
  41.    
  42. int main(int argc, char* argv[])   
  43. {   
  44.         cout < argv[1] < endl;   
  45.         string utf8str(argv[1]);   
  46.         cout < utf8str < endl;   
  47.         cout < IConvert(utf8str) < endl;;   
  48.         return 0;   
  49. }  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约