第二次遇到這個問題了,搞了幾個小時,真是可惡。
從UNICODE 文本中讀取文本信息,怎么的顯示都是亂碼,連著試驗了好多種讀的方法都不對,最后發現讀出來的數據是正確的,在解析的時候出錯了。我使用了wcstombs()這個函數,可是每次轉換之后它返回的值都是-1。
原因在于,代碼頁沒有進行設置。需要調用locale.h 中定義的一個函數設置默認的代碼頁。貼點代碼放在這里,下次別忘了。
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 標志 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(""));//設置代碼頁
nRet=wcstombs(chbuffer,wchbuffer,sizeof(wchbuffer));
if(nRet==1) {
sprintf(chmsg,"wcstombs changed :%d Error:%d",nRet,GetLastError());
MessageBox(chmsg,"debug",0);
}
要讀所有內容的話,還需要處理。