服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Sqlite - 为SQLite3提供一个ANSI到UTF8的互转函数

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

2020-06-06 17:37SQLite教程网 Sqlite

这篇文章主要为大家分享下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: 女孩不哭

延伸 · 阅读

精彩推荐
  • Sqlitesqlite迁移到mysql脚本的方法

    sqlite迁移到mysql脚本的方法

    这篇文章主要介绍了sqlite迁移到mysql脚本的方法,需要的朋友可以参考下 ...

    sqlite教程网4832020-08-05
  • Sqlite初识SQLITE3数据库

    初识SQLITE3数据库

    本文主要讲诉Sqlite数据库的一些基本概念以及SQLite的优势,需要的朋友可以参考下 ...

    SQLITE教程网3192020-06-07
  • SqliteSQLite教程(四):内置函数

    SQLite教程(四):内置函数

    这篇文章主要介绍了SQLite教程(四):内置函数,本文讲解了聚合函数、核心函数、日期和时间函数、,需要的朋友可以参考下 ...

    SQLite教程网4282020-06-09
  • SqliteSQLite教程(一):SQLite数据库介绍

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

    这篇文章主要介绍了SQLite教程(一):SQLite数据库介绍,本文讲解了什么是SQLite、SQLite的主要优点、和RDBMS相比SQLite的一些劣势、个性化特征等内容,需要的朋...

    ZZVIPS6512020-06-08
  • SqliteSQLite教程(五):索引和数据分析/清理

    SQLite教程(五):索引和数据分析/清理

    这篇文章主要介绍了SQLite教程(五):索引和数据分析/清理,本文讲解了创建索引、删除索引、重建索引、数据分析、数据清理等内容,需要的朋友可以参考...

    数据库之家5622020-06-09
  • SqliteSQLite优化方法

    SQLite优化方法

    SQLite的数据库本质上来讲就是一个磁盘上的文件,所以一切的数据库操作其实都会转化为对文件的操作,而频繁的文件操作将会是一个很好时的过程,会极...

    SQLite教程网4022020-06-01
  • SqliteSQLite学习手册(SQLite在线备份)

    SQLite学习手册(SQLite在线备份)

    在SQLite中提供了一组用于在线数据库备份的APIs函数(C接口),可以很好的解决上述方法存在的不足。通过该组函数,可以将源数据库中的内容拷贝到另一个数...

    SQLite教程网5412020-06-06
  • SqliteSQLite 实现if not exist 类似功能的操作

    SQLite 实现if not exist 类似功能的操作

    这篇文章主要介绍了SQLite 实现if not exist 类似功能的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    吉普赛的歌11642021-02-06