这段将UTF-8简体中文转码为UTF-8繁体中文的代码,为什么在繁体XP上转换出乱码?
「已注销」 2008-07-21 03:19:30 这段将UTF-8简体中文转码为UTF-8繁体中文的代码,为什么在繁体XP上转换出乱码,而在简体中文XP系统上毫无问题?
int __fastcall GB2GBK(char *szInBuf, int len, char**szOutBuf)
{
char * tempstr = new char[len+1];
if(len>=3 && szInBuf[0]=='\xEF' && szInBuf[1]=='\xBB' && szInBuf[2]=='\xBF')
{
memcpy(tempstr, &szInBuf[3], len);
tempstr[len-3] = 0;
}
else
{
memcpy(tempstr, szInBuf, len);
tempstr[len] = 0;
}
String src = Utf8ToAnsi(tempstr);
delete tempstr;
int nsrclen = src.Length();
char * szBuf = new char[nsrclen+1];
strcpy(szBuf, src.c_str());
int outlen = 0;
if(!strcmp(szBuf, ""))
{
*szOutBuf = new char[1];
return 0;
}
int nStrLen = mystrlen(szBuf);
WORD wLCID = MAKELCID(MAKELANGID
(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED), SORT_CHINESE_PRC);
//WORD wLCID = MAKELCID(MAKELANGID
// (LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL), SORT_CHINESE_BIG5);
int nReturn = LCMapString(wLCID, LCMAP_TRADITIONAL_CHINESE, szBuf, nStrLen, NULL, 0);
if(!nReturn)
{
*szOutBuf = new char[1];
return 0;
}
char *pcBuf = new char[nReturn + 1];
try
{
wLCID = MAKELCID(MAKELANGID
(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED), SORT_CHINESE_PRC);
//wLCID = MAKELCID(MAKELANGID
// (LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL), SORT_CHINESE_BIG5);
LCMapString(wLCID, LCMAP_TRADITIONAL_CHINESE, szBuf, nReturn, pcBuf, nReturn + 1);
//strncpy(szBuf, pcBuf, nReturn);
pcBuf[nReturn] = 0;
String dest = AnsiToUtf8(pcBuf);
outlen = dest.Length();
*szOutBuf = new char[outlen+1];
strncpy(*szOutBuf, dest.c_str(), outlen);
}
__finally
{
delete[] pcBuf;
delete[] szBuf;
return outlen;
}
}
//---------------------------------------------------------------------------