第二次遇到這個(gè)問(wèn)題了,搞了幾個(gè)小時(shí),真是可惡。
從UNICODE 文本中讀取文本信息,怎么的顯示都是亂碼,連著試驗(yàn)了好多種讀的方法都不對(duì),最后發(fā)現(xiàn)讀出來(lái)的數(shù)據(jù)是正確的,在解析的時(shí)候出錯(cuò)了。我使用了wcstombs()這個(gè)函數(shù),可是每次轉(zhuǎn)換之后它返回的值都是-1。
原因在于,代碼頁(yè)沒(méi)有進(jìn)行設(shè)置。需要調(diào)用locale.h 中定義的一個(gè)函數(shù)設(shè)置默認(rèn)的代碼頁(yè)。貼點(diǎn)代碼放在這里,下次別忘了。
HANDLE hFile;
BYTE buffer[1024]={0};
WCHAR wchbuffer[1024];
char chbuffer[1024],chmsg[1024];
DWORD dwNeedRead=1024;
DWORD dwRead=0;
int nRet;
FILE *fp;
hFile=CreateFile("unicode1.txt",GENERIC_READ,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile==INVALID_HANDLE_VALUE){
MessageBox("CreateFile() fail","Error",0);
return;
}
nRet=ReadFile(hFile,buffer,2,&dwRead,NULL); // Unicode 標(biāo)志 0xFFFE
if((!nRet)||2!=dwRead){
MessageBox("ReadFile() Read first two byte fail","Error",0);
CloseHandle(hFile);
return;
}
else MessageBox("ReadFile() Read first two byte OK","debug ",0);
nRet=ReadFile(hFile,buffer,dwNeedRead,&dwRead,NULL);
if(!nRet){
MessageBox("ReadFile() fail","Error",0);
CloseHandle(hFile);
return;
}
memcpy(wchbuffer,buffer,1024);
_tsetlocale(LC_ALL,_T(""));//設(shè)置代碼頁(yè)
nRet=wcstombs(chbuffer,wchbuffer,sizeof(wchbuffer));
if(nRet==1) {
sprintf(chmsg,"wcstombs changed :%d Error:%d",nRet,GetLastError());
MessageBox(chmsg,"debug",0);
}
要讀所有內(nèi)容的話,還需要處理。