第二次遇到這個(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)容的話,還需要處理。