解决中文乱码问题(GBKTOUTF8)

int code_convert(const char *from_charset, const char *to_charset, char *inbuf, uint32_t inlen, char *outbuf, uint32_t outlen)

{

iconv_t iconvH;

iconvH = iconv_open(to_charset, from_charset);

if (!iconvH) return 0;

memset(outbuf, 0, outlen);

 

#if(CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)

const char *temp = inbuf;

const char **pin = &temp;

if (!iconv(iconvH, pin, &inlen, &outbuf, &outlen))

{

iconv_close(iconvH);

return 0;

}

#elif(CC_TARGET_PLATFORM == CC_PLATFORM_IOS)

size_t tmpInLen = inlen, tmpOutLen = outlen;

if (!iconv(iconvH, &inbuf, &tmpInLen, &outbuf, &tmpOutLen))

{

iconv_close(iconvH);

return 0;

}

#elif(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

if (!iconv(iconvH, &inbuf, &inlen, &outbuf, &outlen))

{

iconv_close(iconvH);

return 0;

}

#endif

 

iconv_close(iconvH);

 

return 0;

}

 

string StringWithCoding(const char* inBuf, const char* srcCode, const char* dstCode)

{

if (inBuf == NULL || strlen(inBuf) == 0)

return "";

 

uint32_t inlen = (uint32_t)strlen(inBuf);

char * outbuf = new char[(inlen + 1) * 4];

string strRet;

char* tempStr = new char[inlen + 1];

strcpy(tempStr, inBuf);

if (code_convert(srcCode, dstCode, tempStr, inlen, outbuf, (inlen + 1) * 4) == 0)

{

strRet = outbuf;

}

delete[] tempStr;

delete[] outbuf;

return strRet;

}

 

string UTF8TOGBK(const char *inbuf)

{

return StringWithCoding(inbuf, "utf-8", "gbk");

}

 

string GBKTOUTF8(const char *inbuf)

{

return StringWithCoding(inbuf, "gbk", "utf-8");

}

调用UTF8TOGBK,返回一个string类型值

例如:label-setString(GBKTOUTF8("中国").c_str());

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值