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的内容。

  • 相关阅读:
    oracle 10g 免安装客户端在windows下配置
    sql2005 sa密码
    使用windows live writer 有感
    windows xp SNMP安装包提取
    汉化groove2007
    迁移SQL server 2005 Reporting Services到SQL server 2008 Reporting Services全程截图操作指南
    foxmail 6在使用中的问题
    AGPM客户端连接不上服务器解决一例
    SpringSource Tool Suite add CloudFoundry service
    Java 之 SWing
  • 原文地址:https://www.cnblogs.com/MaxWoods/p/4098302.html
Copyright © 2011-2022 走看看