VC的fopen函數第一個參數是const char*,一旦遇到中文文件名就難以應付了,如果中文是UTF8編碼的話,我們還可以用下列代碼將其轉換為UNICODE,然后用_wfopen函數打開文件。
代碼如下:
bool UTF8ToUnicode(const char* UTF8, wchar_t* strUnicode){ DWORD dwUnicodeLen; //轉換后Unicode的長度 TCHAR *pwText; //保存Unicode的指針// wchar_t* strUnicode; //返回值 //獲得轉換后的長度,并分配內存 dwUnicodeLen = MultiByteToWideChar(CP_UTF8,0,UTF8,-1,NULL,0); pwText = new TCHAR[dwUnicodeLen]; if (!pwText) { return false; } //轉為Unicode MultiByteToWideChar(CP_UTF8,0,UTF8,-1,pwText,dwUnicodeLen); //轉為CString wcscpy(strUnicode, pwText); //清除內存 delete []pwText; return true;}
這個函數的用法如下:
wchar_t strUnicode[260];UTF8ToUnicode(streamName, strUnicode);FILE* fid = _wfopen(strUnicode, L"rb");// FILE* fid = fopen(streamName, "rb");//此為原來的方法,遇到中文不能正確打開
上述函數仍有不夠完善之處,如參數strUnicode的長度不能靈活設置,讀者可根據自身需求進一步加以完善!
新聞熱點
疑難解答
圖片精選