为SQLite3提供一个ANSI到UTF8的互转函数
为SQLite3提供一个ANSI到UTF8的互转函数
发布时间:2016-12-28 来源:查字典编辑
摘要:在使用Sqlite3时必须要用到的使用方法:char*src="...";//待转换的ANSI或UTF8字符串char*dst=NULL;/...

在使用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: 女孩不哭

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新SQLite学习
热门SQLite学习
编程开发子分类