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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值