由于工作需要字符集的转换,所以记录下来以便查看. int Gb2312ToUtf8( char * sOut, int iMaxOutLen, const char * sIn, int iInLen) ... { char *pIn = (char *)sIn; char *pOut = sOut; size_t ret; int iLeftLen; iconv_t cd; cd = iconv_open("utf-8", "gb2312"); if (cd == (iconv_t) - 1) ...{ return -1; } iLeftLen = iMaxOutLen; ret = iconv(cd, &pIn, (size_t *) & iInLen, &pOut, (size_t *)&iLeftLen); if (ret == (size_t) - 1) ...{ iconv_close(cd); return -1; } iconv_close(cd); return (iMaxOutLen - iLeftLen);} int Utf8ToGb2312( char * sOut, int iMaxOutLen, const char * sIn, int iInLen) ... { char *pIn = (char *)sIn; char *pOut = sOut; size_t ret; int iLeftLen; iconv_t cd; cd = iconv_open("gb2312", "utf-8"); if (cd == (iconv_t) - 1) ...{ return -1; } iLeftLen = iMaxOutLen; ret = iconv(cd, &pIn, (size_t *) & iInLen, &pOut, (size_t *)&iLeftLen); if (ret == (size_t) - 1) ...{ iconv_close(cd); return -1; } iconv_close(cd); return (iMaxOutLen - iLeftLen);} int Gbk2Utf8( char * sOut, int iMaxOutLen, const char * sIn, int iInLen) ... { char * pIn = (char*)sIn; char * pEnd = pIn+iInLen; char * pOut = sOut; int iLeftLen; int iGbkLen; int iRet; iconv_t cd; cd = iconv_open("UTF-8","GBK"); if (cd == (iconv_t)-1) ...{ return -1; } iLeftLen = iMaxOutLen; while(pIn<pEnd) ...{ if((unsigned char)(*pIn)==0x80) ...{ //注意GBK的0x80转换为UTF-8时为E2 82 AC *pOut = 0xe2; pOut++; iLeftLen--; *pOut = 0x82; pOut++; iLeftLen--; *pOut = 0xac; pOut++; iLeftLen--; pIn++; } else if((unsigned char)(*pIn)<0x80) ...{ //单字节(GBK: 0x00-0x7F) *pOut = *pIn; pIn++;pOut++;iLeftLen--; } else ...{ //双字节 iGbkLen=2; iRet=iconv(cd, (char **)&pIn, (size_t *)&iGbkLen, (char **)&pOut, (size_t *)&iLeftLen); if(iRet<0) ...{ *pOut = ' '; //暂时替换为空格 pIn+=2; pOut++; iLeftLen--; } } } iconv_close(cd); sOut[iMaxOutLen - iLeftLen]='