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


在使用Sqlite3时必须要用到的

  使用方法:

  char* src = "...";//待转换的ANSI或UTF8字符串
  char* dst = NULL;//保存由函数内部分配的内存指针, 不需要传入内存缓冲区的

  转换为UTF-8:to_utf8(src, &dst);
  转换为ANSI:to_gb(src, &dst);

  返回值:零 - 失败, 非零 - 成功.
  注意:如果操作成功, 需要手动释放函数内部分配的空间:

复制代码 代码如下:

if(dst)
{
    free(dst);
    dst = NULL;
}

代码:

复制代码 代码如下:

#include <windows.h>
#include <stdio.h>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;
    }
}

by: 女孩不哭



相关阅读:
CSS设置未知大小图片在已知大小容器水平垂直居中
163的邮件用phpmailer发送(实例详解)
PHP使用Pear发送邮件(Windows环境)
Windows10任务栏图标透明化让界面更漂亮
Win10应用商店可以打开点击软件的时候出现闪退问题怎么办?
又一个PHP实现的冒泡排序算法分享
asp.net图片上传实例
CSS HACK收集:关于IE6/FF/google等浏览器hack的方法详细
Android 控制wifi 相关操作实例
详解ASP.NET页面生命周期
Android开发常见问题总结
用CSS3实现Win8风格的方格导航菜单效果
Oracle中如何把表和索引放在不同的表空间里
js实现卡片式项目管理界面UI设计效果
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 星级饭店旅行社安全检查情况汇报 雷锋精神代代传演讲稿 来自心底的感动 《在原始森林中》(二) 小学六年级作文450字:地震自救 撒谎记450字 营销总监个人工作总结 小学六年级作文450字:尚湖 学生演讲稿:心中的颂歌献给党 爱…终于结束了 营销员工作心得 刘小光搞笑大全 水仙的故事(三)作文 尊重强者之强,才能包容弱者之弱 停下来,感受那一一缕的花香 秋天,小燕子飞走了 十山歌呈太守胡平一 初中初三作文800字:灵、逍、月 “六一”送给长辈的祝福语 刺猬姑娘的月夜故事 电力论文:对建设学习型供电企业的浅析和实践 父母感动故事:清明节的诺言 美丽的秋水广场 安全性会议开场白 小学三年级作文400字:校运会上的百米短跑 离开,为了爱 冰糖葫芦虽小商机大 中秋节诗歌散文:爱中秋 秦兵马俑作文200字 学着习惯寂寞 心决定一切 高中高一作文400字:留心处处皆学问 雷伊PK盖亚作文1100字 小学2011年教育行风建设工作汇报 长篇小说《蛋壳》第一三八节 只是因为你 照片里的故事作文1500字 柳暗花明之间作文600字 经典语录 时间不是让人忘了痛,是让人习惯了痛 关于红色经典诗词三首 节目排练 读《丑小鸭》有感800字 一段感人的情话 好习惯伴你成长主题班会 高中高二作文900字:我的春节故事 对三位老师说的心里话作文300字 我县农村村务公开情况的调研报告 给战士的八一建军节祝福语大全 村主任2015年述职述廉报告 化工机械应届生求职信范文

Copyright © 2016 phpStudy |