随感而发

杂七杂八

统计

留言簿(13)

阅读排行榜

评论排行榜

字符编码转换,为什么我的ICONV不能用啊?

哎,找了半天转换,找到了ICONV,据说是跨平台的,很牛。下载的libxml也需要到他,也下载了他的库,由于libxml转换编码格式。

可是用来用去都不正确。网上去找的资料都是一个版本的,我最后的代码为:

 

bool charToUtf_8(IN const char* strSrc, IN OUT char** pstrDst)
{
 
//u2g(in_utf8,strlen(in_utf8),out,OUTLEN);
 iconv_t cd = iconv_open("utf-8""ANSI_X3.4-1986");
 
//iconv_t cd = iconv_open("utf-8", "CP_ACP");
 if (cd == (iconv_t)(-1))
 
{
  
return false;
 }


 size_t ilen 
= ::strlen(strSrc) + 1;
 size_t olen 
= ilen * 4;

 
char *inbuf = new char[ilen];
 
char *outbuf = new char[olen];

 memset(inbuf, 
0, ilen);
 memset(outbuf, 
0, olen);

  
const char *in = inbuf;
  
char *out = outbuf;
// 
  memcpy(inbuf, strSrc, ilen);
 size_t ret 
= iconv(cd, &in&ilen, &out&olen);

 
//下面这种方式会出错,为什么?
 
//size_t ret = iconv(cd, &inbuf, &ilen, &outbuf, &olen);

//  if (ret == (size_t)(-1))
//  {
//   cerr << "iconv error" << endl;
//  }
//  else
//  {
//   cout << outbuf << endl;
//  }

 delete[] inbuf;
 delete outbuf;
 iconv_close(cd);
 
return true;
}

 

当然这些代码是从网上拷贝下来再改的。编译通过,运行就不行了。

后来我放弃了。直接用windows的方法。(还好我是在windows上开发)

 

bool CharToUtf_8(IN const char* strSrc, IN OUT char** pstrDst)
{
 assert(pstrDst);
 
int nSize = MultiByteToWideChar(CP_ACP,NULL, strSrc, -1, NULL, 0);
 WCHAR
* pwchTemp = new WCHAR[nSize];
 nSize 
= MultiByteToWideChar(CP_ACP,NULL, strSrc, -1, pwchTemp, nSize);
 nSize 
= WideCharToMultiByte(CP_UTF8, NULL, pwchTemp, -1, NULL, 000);
 
*pstrDst = new char[nSize];
 nSize 
= WideCharToMultiByte(CP_UTF8, NULL, pwchTemp, -1*pstrDst, nSize, 00);
 
return true;
}

 

这样就可以饿了。呵呵。。哎。。。。
不过挺郁闷的,为什么ICONV不能用啊,有高手指点一下吗?

posted on 2009-07-10 15:23 shongbee2 阅读(1167) 评论(0)  编辑 收藏 引用 所属分类: c/c++


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理