ReadString在UNICODE/多字节下中文乱码的解决办法



用CStdioFile类中的ReadString()方法可以从文件中读取一行,但是在Unicode下,读取的内容有误,同时也无法将中文利用WriteString()写入文件。原因就在于读取文件时是按照 ascii 方式读取的,而直接设定字符串时,是按照unicode 方式读取的。

若使得读取文件时按照 Unicode 方式读取,则需要添加:

setlocale( LC_CTYPE, "chs" ); 其对应的头文件为


在多字节下:

CString str;
CStdioFile file;
file.ReadString(str);

char *pStr = str.GetBuffer(str.GetLength()); //取得str对象的原始字符串
int nBufferSize = MultiByteToWideChar(CP_UTF8, 0, pStr, -1, NULL, 0); //取得所需缓存的多少
wchar_t *pBuffer = (wchar_t*)malloc(nBufferSize * sizeof(wchar_t));//申请缓存空间
MultiByteToWideChar(CP_UTF8, 0, pStr, -1 , pBuffer, nBufferSize*sizeof(wchar_t));//转码
MessageBoxW(NULL, pBuffer, L"Text", MB_OK); //显示
free(pBuffer); //释放缓存

你可能感兴趣的:(ReadString在UNICODE/多字节下中文乱码的解决办法)