unicode、ANSI 、utf-8转换

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。

 

 

你可能感兴趣的:(编码,windows开发)