inux和Windows下面的汉字编码不一样,Linux下面是UTF-8,Windows下面是GB2312,正是由于编码格式不相同从而导致乱码。
1、UTF8ToGB2312转换
int UTF8ToGB2312(char* szSrc, size_t iSrcLen, char* szDst, size_t iDstLen)
{
iconv_t cd = iconv_open("gb2312//IGNORE", "utf-8//IGNORE"); // take care of "//IGNORE", it will ignore those invalid code
if(0 == cd)
return -2;
memset(szDst, 0, iDstLen);
char **src = &szSrc;
char **dst = &szDst;
if(-1 == (int)iconv(cd, src, &iSrcLen, dst, &iDstLen))
return -1;
iconv_close(cd);
return 0;
}
2、 GB2312ToUTF8
int GB2312ToUTF8(char* szSrc, size_t iSrcLen, char* szDst, size_t iDstLen)
{
iconv_t cd = iconv_open("utf-8//IGNORE", "gb2312//IGNORE");
if(0 == cd)
return -2;
memset(szDst, 0, iDstLen);
char **src = &szSrc;
char **dst = &szDst;
if(-1 == (int)iconv(cd, src, &iSrcLen, dst, &iDstLen))
return -1;
iconv_close(cd);
return 0;
}