CString buf; //读unicode格式文件
CStdioFile file("unicode.ini", CFile::modeRead | CFile::typeText);
file.ReadString(buf);
file.Close();
CWnd *pWnd = &m_ret_ctrl; //显示到编辑框
pWnd ->SetWindowText(buf);结果当然是显示乱码了,可是 WideCharToMultiByte()函数不会用.而且,关于字符方面的LPCSTR和LPCWSTR,BSTR等搞不明白是什么意思.
请问该怎么做才能正确显示中文?
CStdioFile file("unicode.ini", CFile::modeRead | CFile::typeText);
file.ReadString(buf);
file.Close();
CWnd *pWnd = &m_ret_ctrl; //显示到编辑框
pWnd ->SetWindowText(buf);结果当然是显示乱码了,可是 WideCharToMultiByte()函数不会用.而且,关于字符方面的LPCSTR和LPCWSTR,BSTR等搞不明白是什么意思.
请问该怎么做才能正确显示中文?
ZeroMemory(szBuf, BUFSIZE);WideCharToMultiByte(
CP_UTF8,
WC_SEPCHARS,
(LPCWSTR)(LPCTSTR)buf,
buf.GetLength(),
NULL,
NULL);
每次读取一个WCHAR,这样不用再作转换
当然换行的地方需要自己检测
CString buf; //读unicode格式文件
CStdioFile file("unicode.ini", CFile::modeRead | CFile::typeText);
file.ReadString(buf);
file.Close();
TCHAR szBuf[1000]; // snlux(snlux) 提示的做转换
ZeroMemory(szBuf, 1000);
WideCharToMultiByte(CP_ACP,
0,(LPCWSTR)(LPCTSTR)buf,-1,szBuf,buf.GetLength(),NULL,NULL);CWnd *pWnd = &m_ret_ctrl; //显示到编辑框
pWnd ->SetWindowText(szBuf);
我得到的结果如下:
文件中存的是"中华人民共和国",转换后显示的是"?中华人民共和国?"
我非常高兴能看到这一结果,虽然不是很正确,希望各位能继续给点提示.多谢!
注意加以处理!
我个人觉得先用stdiofile再用widechartomultibyte有点
麻烦,在vc里处理unicode文本我认为自己处理文件读写比较好
我以前做的一个文本编辑器(没做完),就是用file mapping把
文件一股脑的读进来(当然这种方法可能并不是很好,不过速度
还是很快的),然后分析字节缓冲区,对unicode文件以WCHAR
为单位读入,对ansi文本以char读入...到了.net里就简单了,太简单了...