求教一个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;
...全文
266 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
CathySun118 2007-04-26
  • 打赏
  • 举报
回复
帮顶
南安风语者 2007-04-26
  • 打赏
  • 举报
回复
晕,刚才在复制的时候竟然少了一句话,
strcat( szBuffOut, szBuffOutTemp);

if ( szBuff[i] == 0x3010)
{
bflag = FALSE;
}
else if ( szBuff[i] == 0x3011)
{
bflag = TRUE;
}

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧