紧急,一个编码转换的问题!!utf-8编码转成GBK,因为位数不同而产生字符丢掉问题
liufx 2008-08-29 10:15:19 紧急,一个编码转换的问题!!utf-8编码转成GBK,因为位数不同而产生字符丢掉问题.如果汉字个数 为奇数时就丢失,偶数没有这个问题。请大家帮忙解决?
我先将宽字符串转换成utf8编码的多字节字符串(ConvertGBKToUtf8),然后再转换成unicode编码字符串(ANSI2Unicode()--〉在此出现了字符丢失现象)。
int ConvertGBKToUtf8(const wchar_t * gbk_str, int len, char ** utf8_str)
{
len = WideCharToMultiByte(CP_UTF8, 0,
(LPCWSTR)gbk_str, -1,
NULL,
0, NULL, NULL);
*utf8_str = new char[len + 1];
if(*utf8_str == NULL)
return -1;
memset(*utf8_str, 0, len + 1);
len = WideCharToMultiByte (CP_UTF8, 0, (LPCWSTR)gbk_str,
-1, *utf8_str, len, NULL,NULL);
return len;
}
int ANSIToUnicode(LPCSTR lpMultiByteStr,int cbMultiByte, wchar_t **UnicodeBuffer)
{
*UnicodeBuffer = NULL;
int iLen=MultiByteToWideChar (CP_ACP, 0, lpMultiByteStr, cbMultiByte, NULL,0);
if(iLen <= 0)
return 0;
*UnicodeBuffer = new wchar_t[iLen + 1];
if(*UnicodeBuffer == NULL)
return -1;
memset(*UnicodeBuffer, 0, sizeof(wchar_t) * (iLen + 1));
iLen = MultiByteToWideChar (CP_ACP, 0,
lpMultiByteStr, cbMultiByte,
*UnicodeBuffer, iLen);
return iLen;
}