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

随心笔谈2年前发布 编辑
160 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;

    }

}

© 版权声明

相关文章