zoukankan      html  css  js  c++  java
  • C++Builder RAD Studio XE, UTF-8 String 转换为 char * 字符串的最简单方式, 常用于sqlite3开发

    前段时间突然使用sqlite3开发,中间需要用中文,XE的缺省char*直接使用中文,在sqlite *.db3的数据库表格中显示是乱码,用数据库管理器来浏览等管理时非常不便。

      于是决定还是使用utf-8的String数据类型,但在sqlite的API中,输入字符串参数均为char*,直接使用String是编译通不过的,在csdn,谷哥,度娘等搜索,不知道是关键字没设置好还是什么,说的都不得要领,后来找到有人会写一段程序,用逐个字符翻译的方式转换,我心不甘,于是试了几天,试出一个更加简便的方式,列出给各位。

        我使用的编译器是RAD XE, Sqlite版本3.7.9, 数据库管理器是sqlite expert 3.3.52。

        直接使用字符串,由于编译为GBK,导致管理器浏览出来是乱码。

        int iRet;
        sqlite3 *psqlite3;
        char    *pQuery, *pErrMsg;
        iRet = sqlite3_open( "c:\test.db3", &psqlite3 );
        pQuery      = "INSERT INTO table1 (idno,user,pass) VAULES( 1, 'GBK中文', '直接使用char类型' );";
        iRet = sqlite3_exec( psqlite3, pQuery, NULL, NULL, &pMsg );
        sqlite3_close( psqlite3 );  


        而当使用String类型,在如下转换后, sqlite expert正常显示中文,表明使用了utf-8编译成功.

        int iRet;
        sqlite3 *psqlite3;
        char    *pQuery, *pErrMsg, QueryBuf[512];
        String  strUtf8;
        RawByteString strRaw;

        strUtf8     = "INSERT INTO table1 (idno,user,pass) VAULES( 1, 'Utf8中文', '使用String类型再转' );";"
        strRaw      = UTF8Encode(strUtf8);
        strcpy( QueryBuf, strRaw.c_str() );
        

        iRet = sqlite3_open( "c:\test.db3", &psqlite3 );
        iRet = sqlite3_exec( psqlite3, QueryBuf, NULL, NULL, &pMsg );
        sqlite3_close( psqlite3 );  
       

        测试后看,utf-8格式显示中文成功。

        这里的关键是,把String类型utf-8,使用UTF8Encode系统函数,转换成RawByteString,然后使用RawByteString类型的成员函数c_str(),可转换成char*类型,而内容是utf-8格式的,这样在传进sqlite api后,可正常作为utf-8的内容。

  • 相关阅读:
    实例讲解虚拟机3种网络模式(桥接、nat、Host-only)
    期刊搜索问题——SCI、EI、IEEE和中文期刊
    面向对象分析与设计(C++)课堂笔记
    windows与VMware ubuntu虚拟机实现文件共享
    GDI+在绘制验证码中的使用
    【转】.net中快捷键的使用
    MD5加密“破解”在.NET平台实现最基本的理解
    UE4 Persona 骨架网格物体动画
    从零开始做3D地图编辑器 基于QT与OGRE
    TBB(Intel Threading Building Blocks)学习笔记
  • 原文地址:https://www.cnblogs.com/MaxWoods/p/4098302.html
Copyright © 2011-2022 走看看