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

2022-12-08 0 289

在使用Sqlite3时必须要用到的

  使用方法:

  char* src = \”…\”;//待转换的ANSIUTF8字符串  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: 女孩不哭

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 SQLite数据库 为SQLite3提供一个ANSI到UTF8的互转函数 https://www.u-9.cn/sql/sqlite/6229.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务

  • 0 +

    访问总数

  • 0 +

    会员总数

  • 0 +

    文章总数

  • 0 +

    今日发布

  • 0 +

    本周发布

  • 0 +

    运行天数

注册会员,众多资源免费下载