求教一个Unicode转化成GB2312和S-JIS的问题(急呀)
南安风语者 2007-04-26 05:26:32 下面的代码是我自己写的一个把Unicode转化成GB2312和S-JIS字符,把【】中的汉字转化成GB2312,其它的都转化成S-JIS写在文件中,但是我发现这个程序在有些GB2312后跟S-JIS的时候就会出现乱码,比如:【热天】暑い日中的"】"在GB2312和S-JIS模式中看都是乱码,还有比如【花时间hua1/shi2jiang1】中的"h",在S-JIS中显示竟然是乱码,在GB2312中却是正常的,而且我在程序中已经却定"h",是被转化成了S-JIS码的,请那位高手指点一下
FILE* fp = NULL;
FILE* fpout = NULL;
DWORD dwSize = 0;
DWORD dwNewSize = 0;
fp = fopen( csFileName, "rb" );
if( fp == NULL)
{
return FALSE;
}
fseek(fp,0,SEEK_END);
dwSize = ftell( fp);
wchar_t* szBuff = new wchar_t[dwSize+2];
memset(szBuff,NULL,sizeof(szBuff));
fseek(fp,0,0);
dwNewSize = fread( szBuff, sizeof( wchar_t), dwSize/2, fp);
if ( dwNewSize <= 0)
{
AfxMessageBox("error");
fclose( fp);
return FALSE;
}
fclose( fp);
char* szBuffOut = new char[dwNewSize*2+1];
char* szBuffOutTemp = new char[16];
int nSizeOut = 0;
BOOL bflag = TRUE;
memset(szBuffOut,NULL,sizeof(szBuffOut));
int m = 0;
int n = 0;
CString csTest;
for (int i = 1;i<=(int)dwNewSize-1; i++)
{
memset(szBuffOutTemp,NULL,sizeof(szBuffOutTemp));
// Unicode To S-JIS
if ( CheckEnglish( szBuff[i]) || szBuff[i] == 0x3010 || szBuff[i] == 0x3011 || bflag || szBuff[i] < 0x4E00 || szBuff[i] > 0x9FA5)
{
int nLen = WideCharToMultiByte(932, 0, szBuff+i, 1, szBuffOutTemp, 2, NULL, NULL);
if ( nLen <= 0)
{
AfxMessageBox("change-error1");
return FALSE;
}
nSizeOut += nLen;
}
else
{
// Unicode To GB2312
int nLen = WideCharToMultiByte(936, 0, szBuff+i, 1, szBuffOutTemp, 2, NULL, NULL);
if ( nLen <= 0)
{
AfxMessageBox("change-error2");
return FALSE;
}
nSizeOut += nLen;
}
if ( szBuff[i] == 0x3010)
{
bflag = FALSE;
}
else if ( szBuff[i] == 0x3011)
{
bflag = TRUE;
}
}
if((fpout = fopen( csOutFileName, "wb" )) == NULL )
{
return FALSE;
}
fwrite( szBuffOut, sizeof( char), nSizeOut, fpout);
fclose( fpout);
return TRUE;