GBK与UTF8 编码转化(C++)
来源:互联网 发布:517网络加速器官网 编辑:程序博客网 时间:2024/05/16 11:10
引用:http://www.vimer.cn/2009/10/gbk%E4%B8%8Eutf8-%E7%BC%96%E7%A0%81%E8%BD%AC%E5%8C%96%EF%BC%88c%EF%BC%89.html
//GBK 2 UTF8
int API_Gbk2Utf8(const char *szSource, string &strDest)
{
char szUniString[strlen(szSource)*2];
int iLen = string_gbk2unicode(szSource, szUniString, strlen(szSource));
unsigned char pTemp[4] = {0};
unsigned short iTemp;
char *pUTFString = (char *)malloc(sizeof(szUniString) *2+1);
int pos=0;
for (int i=0; i<iLen; i++)
{
iTemp =(((unsigned char)szUniString[i])<<8) + (szUniString[i+1] & 0xff);
i++;
int len= UCS2toUTF8Code(iTemp, pTemp);
if (0 == len)
{
return -1;
}else{
memcpy((void*)(pUTFString+pos),(const void*)pTemp,len);
pos+=len;
}
memset(pTemp , 0 ,sizeof(pTemp));
}
pUTFString[pos]='/0';
strDest = pUTFString;
free(pUTFString);
return 0;
}
// UTF8 to GBK
int API_IC_UTFToGBK(string& str)
{
const char * rsIn = str.c_str();
int rsInLength = str.length();
char buff[str.length() + 128];
memset(buff, 0, sizeof(buff));
char *rsOut = buff;
int rsOutLength = str.length() + 128;
int iLeftRoomLen,iLeftInLen,iOutLen;
iconv_t stCvt;
stCvt = iconv_open("GBK", "UTF-8");
if (stCvt == 0) return -1;
iLeftInLen = rsInLength;
iLeftRoomLen = iLeftInLen * 4 + 1;
iOutLen = iLeftRoomLen;
char * pszWorkingBuffer = new char[iLeftRoomLen];
if (pszWorkingBuffer == NULL)
return -1;
char * pszOutBuf = pszWorkingBuffer;
memset(pszWorkingBuffer,0,iLeftRoomLen);
int iRet;
char *pInBuf = (char *)rsIn;
while (iLeftInLen > 0)
{
iRet = iconv(stCvt, &pInBuf, (size_t*)&iLeftInLen, &pszWorkingBuffer, (size_t *)&iLeftRoomLen);
if (iRet == (int)((size_t)-1))
{
if (errno == EILSEQ)
{
iLeftInLen -= 2;
pInBuf += 2;
}
else
{
iconv_close(stCvt);
delete[] pszOutBuf;
return -2;
}
}
}
iconv_close(stCvt);
pszOutBuf[iOutLen - iLeftRoomLen] = 0;
rsOutLength = iOutLen - iLeftRoomLen;
memcpy(rsOut, pszOutBuf, rsOutLength);
delete[] pszOutBuf;
str = rsOut;
return 0;
}
- GBK与UTF8 编码转化(C++)
- C++ 字符串UTF8与GBK转化
- C++ 字符串UTF8与GBK转化
- 编程中gbk与utf8的转化
- C++ 字符串UTF8与GBK转化
- VC6 实现GBK到UTF8编码转换(c++)
- utf8与gbk字符编码的转换
- GBK与UTF8编码相互转换
- UTF8与GBK字符编码转换
- GBK与UTF8编码互转
- VC 实现 汉字 GBK(GB2312) 转化为 UTF8 编码
- VC 实现 汉字 GBK(GB2312) 转化为 UTF8 编码
- VC 实现 汉字 GBK(GB2312) 转化为 UTF8 编码
- VC 实现 汉字 GBK(GB2312) 转化为 UTF8 编码
- UTF8和gbk编码转换(一)
- UTF8和gbk编码转换(二)
- JAVA编码--Gbk-->Utf8
- GBK UTF8 编码转换
- http消息头解读
- pku 1017 Packets
- 01背包问题
- mysql 表名大写
- 使用Wake On Lan远程唤醒
- GBK与UTF8 编码转化(C++)
- Asterisk的SIP type和身份认证
- 无向图深度优先遍历和广度优先遍历
- C++ primer 顺序容器
- include file与include page的区别
- 遍历DOM的其他方法
- 英飞凌针推出创新医疗平台解决方案
- 杂文
- 学习笔记(二)