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的長度不克不及靈巧設置,讀者可依據本身需求進一步加以完美!