为SQLite3提供一个ANSI到UTF8的互转函数

随心笔谈11个月前发布 admin
87 0

#include

#include int to_utf8(char* psrc, char** ppdst)

{

    int ret,ret2;

    wchar_t* pws=NULL;

    char* putf=NULL;

    ret=MultiByteToWideChar(CP_ACP, 0, psrc, -1, NULL, 0);

    if(ret<=0){

        *ppdst=NULL;

        return 0;

    }

    pws=(wchar_t*)malloc(ret*2);

    if(!pws){

        *ppdst=NULL;

        return 0;

    }

    MultiByteToWideChar(CP_ACP, 0, psrc, -1, pws, ret);

    ret2=WideCharToMultiByte(CP_UTF8, 0, pws, -1, NULL, 0, NULL, NULL);

    if(ret2<=0){

        free(pws);

        return 0;

    }

    putf=(char*)malloc(ret2);

    if(!putf){

        free(pws);

        return 0;

    }

    if(WideCharToMultiByte(CP_UTF8, 0, pws, ret, putf, ret2, NULL, NULL)){

        *ppdst=putf;

        free(pws);

        return 1;

    }else{

        free(pws);

        free(putf);

        *ppdst=NULL;

        return 0;

    }

}

int to_gb(char* psrc, char** ppdst)

{

    int ret, ret2;

    wchar_t* pws=NULL;

    char* pgb=NULL;

    ret=MultiByteToWideChar(CP_UTF8, 0, psrc, -1, NULL, 0);

    if(ret<=0){

        *ppdst=NULL;

        return 0;

    }

    pws=(wchar_t*)malloc(ret*2);

    if(!pws){

        *ppdst=NULL;

        return 0;

    }

    MultiByteToWideChar(CP_UTF8, 0, psrc, -1, pws, ret);

    ret2=WideCharToMultiByte(CP_ACP, 0, pws, -1, NULL, 0, NULL, NULL);

    if(ret2<=0){

        free(pws);

        return 0;

    }

    pgb=(char*)malloc(ret2);

    if(!pgb){

        free(pws);

        *ppdst=NULL;

        return 0;

    }

    if(WideCharToMultiByte(CP_ACP, 0, pws, -1, pgb, ret2, NULL, NULL)){

        *ppdst=pgb;

        free(pws);

        return 1;

    }else{*ppdst=0;

        free(pgb);

        free(pws);

        return 0;

    }

}

© 版权声明

相关文章