一个用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下打开在转换的过程中还应该做什么操作?
当我用这段代码: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下打开在转换的过程中还应该做什么操作?
utf-8是unicode的一种表示方法,并不是我们通常讲的unicode。
utf-8是变宽的,一个字符可以由1,2,3个字节表示,而通常的用的是ucs-2,即所有字符使用两字节来表示,即WCHAR。WideCharToMultiByte只能用于WCHAR,而不能用于WCHAR。utf-8转换成普通的unicode字符是有算法的,懒得查了
WideCharToMultiByte只能用于WCHAR,而不能用于utf-8
如果是ASCII字符(<128),就用一个字节表示;如果是中文字符,就用一个大于128的字节加这个中文字符的Unicode编码表示。
具体的编码是不是GB2312我不太清楚,建议用我的方法先试试。
到底如何转换,好象没有见到简单的api。
也许真要痛苦的去分析字节流了。utf-8的编码方式跟gb2312以及ucs2不同的,但是字符的码位肯定是有对应关系的。在这种编码体系下,一个汉字可能占两字节或者三字节。