1、unicode转换成ANSI
char *UnicodeToANSI(wchar_t *unicode_str)
{
if(!unicode_str)
return NULL;
// wide char to multi char
int ansiLen = WideCharToMultiByte(CP_ACP, 0, unicode_str, -1, NULL, 0, NULL, NULL);
if(!ansiLen)
return NULL;
char *ansi_str = (char *) malloc(ansiLen + 1);
if(!ansi_str)
return NULL;
WideCharToMultiByte(CP_ACP, 0, unicode_str, -1, ansi_str, ansiLen, NULL, NULL);
return ansi_str;
}
2、ANSI转换成Unicode
wchar_t *ANSIToUnicode(char *ansi_str)
{
if(!ansi_str)
return NULL;
int unicodeLen = MultiByteToWideChar(CP_ACP, 0, ansi_str, -1, NULL, 0);
if(!unicodeLen)
return NULL;
wchar_t *unicode_str = (wchar_t *) malloc((unicodeLen + 1) * sizeof(wchar_t));
if(!unicode_str)
return NULL;
MultiByteToWideChar(CP_ACP, 0, ansi_str, -1, unicode_str, unicodeLen);
return unicode_str;
}
3、utf8转换成unicode
wchar_t *Utf8ToUnicode(char *utf8_str)
{
if(!utf8_str)
return NULL;
int unicodeLen = MultiByteToWideChar(CP_UTF8, 0, utf8_str, -1, NULL, 0);
if(!unicodeLen)
return NULL;
wchar_t *unicode_str = (wchar_t *) malloc((unicodeLen + 1) * sizeof(wchar_t));
if(!unicode_str)
return NULL;
MultiByteToWideChar(CP_UTF8, 0, utf8_str, -1, unicode_str, unicodeLen);
return unicode_str;
}
4、unicode转换成utf-8
char *UnicodeToUtf8(wchar_t *unicode_str)
{
if(!unicode_str)
return NULL;
int strLen = WideCharToMultiByte(CP_UTF8, 0, unicode_str, -1, NULL, 0, NULL, NULL);
if(!strLen)
return NULL;
char *utf8_str = (char *) malloc(strLen + 1);
if(!utf8_str)
return NULL;
WideCharToMultiByte(CP_UTF8, 0, unicode_str, -1, utf8_str, strLen, NULL, NULL);
return utf8_str;
}
5、ANSI转换成utf-8需要先将ansi转换成unicode,再将unicode转换成utf-8;utf-8转换成ANSI同样需要通过Unicode。