VC下完成fopen支撐中文的辦法。本站提示廣大學習愛好者:(VC下完成fopen支撐中文的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是VC下完成fopen支撐中文的辦法正文
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的長度不克不及靈巧設置,讀者可依據本身需求進一步加以完美!