VC下Unicode转UTF-8, 偶数长度的中文字符串没有关问题,奇数长度的中文字符串就会出有关问题

VC下Unicode转UTF-8, 偶数长度的中文字符串没问题,奇数长度的中文字符串就会出问题!
UFT8Switch(CString& str)
{
std::string s = CT2A(str, CP_UTF8);
str = s.c_str();
return str;
}

std::string Unicode2Utf8(const std::wstring& widestring)  
{  
int utf8size = ::WideCharToMultiByte(CP_UTF8, 0, widestring.c_str(), -1, NULL, 0, NULL, NULL);  
if (utf8size == 0)  
{  
throw std::exception("Error in conversion.");  
}  

std::vector<char> resultstring(utf8size);  

int convresult = ::WideCharToMultiByte(CP_UTF8, 0, widestring.c_str(), -1, &resultstring[0], utf8size, NULL, NULL);  

if (convresult != utf8size)  
{  
throw std::exception("La falla!");  
}  

return std::string(&resultstring[0]);  
}  

上面两种转换方式都试过了, 都是同样的问题,偶数长度中文字符串,像"张三"之类的就不会出问题!但像"张三三"一类奇数长度的字符串转化出来的就有问题!
PS :我是将转换后的字符串,插入sqlite数据库, 然后用可视化的数据库管理软件打开数据库看是否是乱码!
VC UTF-8 Unicode

------解决方案--------------------
先验证自己转UTF-8有没有转换正确,把源字符串用其他工具(比如UE)转换到UTF-8,查看2进制比较是否一样
------解决方案--------------------
std::wstring_convert<std::codecvt_utf8<wchar_t>> myconv;
------解决方案--------------------



void  ConvertUtf8ToGBK(CString &amp,unsigned char * strUtf8) 

int len=MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUtf8, -1, NULL,0); 
unsigned short * wszGBK = new unsigned short[len+1]; 
memset(wszGBK, 0, len * 2 + 2); 
MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUtf8, -1, (LPWSTR)wszGBK, len);

len = WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)wszGBK, -1, NULL, 0, NULL, NULL); 
char *szGBK=new char[len + 1]; 
memset(szGBK, 0, len + 1); 
WideCharToMultiByte (CP_ACP, 0, (LPCWSTR)wszGBK, -1, szGBK, len, NULL,NULL); 
//strUtf8 = szGBK; 

amp=szGBK;
delete[] szGBK; 
delete[] wszGBK; 
}

------解决方案--------------------
void ConvertANSIToUTF8(CString &strANSI) 

int nLen = ::MultiByteToWideChar(CP_ACP,MB_ERR_INVALID_CHARS,(LPCTSTR)strANSI,-1,NULL,0); 
unsigned short * wszUTF_8 = new unsigned short[nLen+1]; 
memset(wszUTF_8, 0, nLen * 2 + 2); 
nLen = MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)strANSI, -1, wszUTF_8, nLen);