是个读一个.txt文件内容的问题,其中strtxt是文件名字(***.txt)的变量。
代码如下:
void ReadTxt::OnOK()
{
// TODO: Add extra validation here
//---------------createfile打开,然后用readfile读取数据----------------//
HANDLE hFile;
DWORD dwBytesRead;
char buff[4096];
hFile = CreateFile(strtxt,GENERIC_READ,0,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile == INVALID_HANDLE_VALUE)
{
AfxMessageBox(L"Cound not open the file");
return;
}
if(ReadFile(hFile,buff,4096,&dwBytesRead,NULL))
{
CEdit* p = NULL;
p = (CEdit*)GetDlgItem(IDC_EDIT1);
GetDlgItem(IDC_EDIT1)->SetWindowText((const unsigned short *)buff);
GotoDlgCtrl(p);
free(p);
}
}
这个,在evc的编辑框控件IDC_EDIT1中就是显示乱码,本来是sdhfos12456这样的一个字符串就显示着方块或不知道什么符号的乱码,很郁闷。
下面是我写的程序的另一个版本,但只能显示txt文件里字符串的第一位。这样的:
void ReadTxt::OnOK()
{
// TODO: Add extra validation here
//---------------createfile打开,然后用readfile读取数据----------------//
HANDLE hFile;
DWORD dwBytesRead;
CString str;
hFile = CreateFile(strtxt,GENERIC_READ,0,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile == INVALID_HANDLE_VALUE)
{
AfxMessageBox(L"Cound not open the file");
return;
}
if(ReadFile(hFile, (LPSTR)(LPCTSTR)str, 1, &dwBytesRead, NULL))
{
CEdit* p = NULL;
p = (CEdit*)GetDlgItem(IDC_EDIT1);
GetDlgItem(IDC_EDIT1)->SetWindowText(str);
GotoDlgCtrl(p);
free(p);
}
}这个就能显示asdfhso13546的第一位的a,而把ReadFile的第三个参数改成100等数字却变成了如第一个写法中一样的一行乱码。实在找不到办法全正确显示出来啊
大家帮帮忙,困扰我整整一天了。谢谢大家!!!!
从文件里读出来是ASCII码,WinCE下要正确显示,必须转换成UNICODE。
从文件里读出来是ASCII码,WinCE下要正确显示,必须转换成UNICODE。
若还不可以,在试试别的编码.
在网上查ASC2码转UNICODE用mbstowcs,但具体怎用不了解喔,能否给代码,谢谢+谢谢
首先定义中文数组应该用双字节指针wchar_t,而拷贝函数也不能用strcpy,而应该用: wchar_t * wcscpy(wchar_t * wDest,wchar_t * wSource);函数,操作如下:
wchar_t s[20];
CString str=“你好”;
wcscpy(s,(LPCTSTR)str); //前面没有转成UNICODE编码,所以这里需要强制转换
多字节和宽字符之间转换的函数:mbstowcs, mbtowc, wcstombs, wctomb.
mbstowcs---Convert a multi-byte(ANSI) string to wide character stirng(Unicode).
wcstombs---Convert a wide character string to multi-byte string.
WCHAR szwcBuffer[100];
char szBuffer[100];
char* lpszConvert = "ANSI String to convert";
WCHAR* lpszwcConvert = _T("Unicode string to convert");
int nChars;
nChars = mbstowcs(szwcBuffer, lpszConvert, 100);
nChars = wcstombs(szBuffer, lpszwcConvert, 100);