使用CFtpFileFind类,获取服务器上的文件信息中文乱码问题?

使用CFtpFileFind类,获取服务器上的文件信息中文乱码,本地工程环境是Unicode,服务器获取出来是UTF-8,获取得到含有中文字符串的数据,先UTF-8->Unicode,在Unicode->GBK2312,字符串为偶数个汉字的时候,可以正常转换成功,当字符串为奇数个汉字时,只能转换出前偶数个汉字,剩下一个汉字,仍是乱码。
转换代码如下

string CExplorerDlg::Utf8ToGbk(const char * utf8)
{
    int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
    wchar_t *wstr = new wchar_t[len + 1];
    memset(wstr, 0, len * 2 + 2);
    MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len);
    len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
    char* strgbk = new char[len + 1];
    memset(strgbk, 0, len + 1);
    WideCharToMultiByte(CP_ACP, 0, wstr, -1, strgbk, len, NULL, NULL);
    string str(strgbk);
    if (wstr)delete[] wstr;
    if (strgbk)delete[] strgbk;
    return str;
}

有遇到过这种情况的吗?

utf8字符集,一个汉字应该是3个字节。