UTF8转Unicode:
char* UTF8ToUnicode(char* szUTF8) { int wcscLen = ::MultiByteToWideChar(CP_UTF8, NULL, szUTF8, int(strlen(szUTF8)), NULL, 0);//得到所需空间的大小 wchar_t* wszcString = new wchar_t[wcscLen + 1];//给'\0'分配空间 ::MultiByteToWideChar(CP_UTF8, NULL,szUTF8, int(strlen(szUTF8)), wszcString, wcscLen); //转换 wszcString[wcscLen] = '\0'; char *m_char; int len = WideCharToMultiByte(CP_ACP, 0, wszcString, int(wcslen(wszcString)), NULL, 0, NULL, NULL); m_char = new char[len + 1]; WideCharToMultiByte(CP_ACP, 0, wszcString, int(wcslen(wszcString)), m_char, len, NULL, NULL); m_char[len] = '\0'; return m_char; }
Unicode转UTF-8:
char* UnicodeToUTF8(wchar_t* wszcString) { int utf8Len = ::WideCharToMultiByte(CP_UTF8, NULL, wszcString, int(wcslen(wszcString)), NULL, 0, NULL, NULL); //得到所需空间的大小 char* szUTF8 = new char[utf8Len + 1]; //给'\0'分配空间 ::WideCharToMultiByte(CP_UTF8, NULL, wszcString, int(wcslen(wszcString)), szUTF8, utf8Len, NULL, NULL); //转换 szUTF8[utf8Len] = '\0'; return szUTF8; }
ANSI转Unicode:
wchar_t* ANSIToUnicode(char *szAnsi) { // ansi to unicode //预转换,得到所需空间的大小 int wcsLen = ::MultiByteToWideChar(CP_ACP, NULL, szAnsi, strlen(szAnsi), NULL, 0); //分配空间要给'\0'留个空间,MultiByteToWideChar不会给'\0'空间 wchar_t* wszString = new wchar_t[wcsLen + 1]; //转换 ::MultiByteToWideChar(CP_ACP, NULL, szAnsi, strlen(szAnsi), wszString, wcsLen); //最后加上'\0' wszString[wcsLen] = '\0'; return wszString; }
Unicode转Ansi:
char* UnicodeToANSI(wchar_t* wszString) { // unicode to ansi //预转换,得到所需空间的大小,这次用的函数和上面名字相反 int ansiLen = ::WideCharToMultiByte(CP_ACP, NULL, wszString, wcslen(wszString), NULL, 0, NULL, NULL); //同上,分配空间要给'\0'留个空间 char* szAnsi = new char[ansiLen + 1]; //转换 //unicode版对应的strlen是wcslen ::WideCharToMultiByte(CP_ACP, NULL, wszString, wcslen(wszString), szAnsi, ansiLen, NULL, NULL); //最后加上'\0' szAnsi[ansiLen] = '\0'; return szAnsi; }