一个用UTF-8编码的html文件,里面包含中英文,我想用程序把它转换成GB2312编码的html文件,
当我用这段代码:UnicodeToChar(LPSTR Buf, DWORD bufSize, CFile *f)
{
 WCHAR *dest=new WCHAR[bufSize];
 f->ReadHuge(dest,bufSize*2);
 WideCharToMultiByte(CP_ACP,0,dest,-1,Buf,bufSize,NULL,NULL);
 delete [] dest;
}
把原先的html读入,然后用WideCharToMutiByte函数转换成GB2312,之后写入新的html文件
我发现所有的内容全部乱掉,包括英文字符均不能在UTF-8或者GB2312下打开在转换的过程中还应该做什么操作?

解决方案 »

  1.   


    utf-8是unicode的一种表示方法,并不是我们通常讲的unicode。
    utf-8是变宽的,一个字符可以由1,2,3个字节表示,而通常的用的是ucs-2,即所有字符使用两字节来表示,即WCHAR。WideCharToMultiByte只能用于WCHAR,而不能用于WCHAR。utf-8转换成普通的unicode字符是有算法的,懒得查了
      

  2.   

    sorry
    WideCharToMultiByte只能用于WCHAR,而不能用于utf-8
      

  3.   

    UTF-8的编码方式是如上所说,如果我没搞错的话应该可以这样理解
    如果是ASCII字符(<128),就用一个字节表示;如果是中文字符,就用一个大于128的字节加这个中文字符的Unicode编码表示。
    具体的编码是不是GB2312我不太清楚,建议用我的方法先试试。
      

  4.   


    到底如何转换,好象没有见到简单的api。
    也许真要痛苦的去分析字节流了。utf-8的编码方式跟gb2312以及ucs2不同的,但是字符的码位肯定是有对应关系的。在这种编码体系下,一个汉字可能占两字节或者三字节。
      

  5.   

    试试用这个code-page: CP_UTF8WideCharToMultiByte(CP_UTF8,0,dest,-1,Buf,bufSize,NULL,NULL);
      

  6.   

    我想是不是可以先从utf-8转化为unicode,然后再转为gb2321