手机
当前位置:查字典教程网 >编程开发 >SQLite >为SQLite3提供一个ANSI到UTF8的互转函数
为SQLite3提供一个ANSI到UTF8的互转函数
摘要:在使用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: 女孩不哭

【为SQLite3提供一个ANSI到UTF8的互转函数】相关文章:

SQLite教程(九):在线备份

SQLite3中的日期时间函数使用小结

SQLite3 命令行操作指南

一些很有用的SQLite命令总结

ubuntu下使用SQLite3的基本命令

SQLite 性能优化实例分享

sqlite中文乱码问题原因分析及解决

SQLite教程(四):内置函数

SQLite教程(一):SQLite数据库介绍

sqlite循环批量插入数据采用批处理文件实现

精品推荐
分类导航