为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 交通频道 作文范文 古代诗歌鉴赏专题讲座(转载) 初中作文600字 责任 海边的孩子爱大海 人天惟心 我敬佩的叔叔 当女孩懂得爱时,爱已远走 学校财务管理工作计划 在女厕所上上网被表扬了 小学五年级作文450字:外婆笑了 毕业论文答辩稿参考范文 送元二使安西 古诗 “三严三实”研讨会发言材料 醉生梦死-日志:用一颗公正心看长春... 汽车维修工作心得 七绝二首作文150字 凤凰起舞的日子 《风尘》诗歌 乌龟自述 08年大学生入党申请书 把手插在裤兜里 未来的机器人社会 理术语僵化你的思维? 雨后的风景作文500字 初中初二作文800字:银杏树下的约定(6) 侯以雷诗歌欣赏215 重返青春 相约秋季 春来、花开、梦碎、释怀作文150字 体验军训作文 王大仁,纽约最红设计师 父亲 认识qq作文300字 2015年会计专业实习报告 先求自重 胖蛤蟆 那些无法遗忘的记忆作文1200字 宝贝我知道你的心已经上了锁!我愿变成钥匙。不惜一切 连锁超市项目计划书 群书荟萃300字 空乘面试英语常用句自我介绍 “弘扬沈浩精神、打造四型机关”主题实践工作总结 读《野生的爱尔莎》有感作文500字 办公室的故事(三) 淘气鬼 万圣节舞会装扮 加强人民调解工作促进企业安定团结 为奥运喝彩作文2000字 忘长安-之一 骂人最难听的话 中国古今寓言读后感800字

Copyright © 2016 phpStudy |