本來想用文件保存幾個字符串,其中還有漢字的字符串。因為是用MFC做的,所以我自然想到用MFC提供的CFile類來文件IO。但是CFile不能一條一條記錄(用回車符分隔的字符串)的讀取。於是我改用CStdioFile類,可是CStdioFile::WriteString和Readstring進行文件IO時對中文的支持不好,要麼是不能寫入中文到文件中,用麼是不能從文件中讀入中文。文本模式和二進制模式我都試了了。自己創建UNICODE編碼的文本文件也不能正常讀取。搞到半夜還是沒搞定。我怒了。於是改用C++的標准文件IO流訪問ANSI文件。再將ANSI字符串轉換到Unicode字符串。問題終於解決了。 將ANSI轉換到Unicode (1)通過L這個宏來實現,例如: CLSIDFromProgID( L"MAPI.Folder",&clsid); (2)通過MultiByteToWideChar函數實現轉換,例如: char *szProgID = "MAPI.Folder"; WCHAR szWideProgID[128]; CLSID clsid; long lLen = MultiByteToWideChar(CP_ACP,0,szProgID,strlen(szProgID),szWideProgID,sizeof(szWideProgID)); szWideProgID[lLen] = '\0'; (3)通過A2W宏來實現,例如: USES_CONVERSION; CLSIDFromProgID( A2W(szProgID),&clsid); 將Unicode轉換到ANSI (1)使用WideCharToMultiByte,例如: // 假設已經有了一個Unicode 串 wszSomeString... char szANSIString [MAX_PATH]; WideCharToMultiByte ( CP_ACP, WC_COMPOSITECHECK, wszSomeString, -1, szANSIString, sizeof(szANSIString), NULL, NULL ); (2)使用W2A宏來實現,例如: USES_CONVERSION; pTemp=W2A(wszSomeString);