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的内容。
C++Builder RAD Studio XE, UTF-8 String 转换为 char * 字符串的最简单方式, 常用于sqlite3开发的更多相关文章
- Delphi XE 6,Rad Studio XE 6 官方下载(附破解)
官方光盘镜像下载: http://altd.embarcadero.com/download/radstudio/xe6/delphicbuilder_xe6_win.iso RAD Studio ...
- Delphi XE 4,Rad Studio XE 4 官方下载,更新Update 1(附破解)
http://blog.csdn.net/maxwoods/article/details/8842889 XE4 Update1 下载: http://altd.embarcadero.com/do ...
- C++ 将 std::string 转换为 char*
参考: std::string to char* C++ 将 std::string 转换为 char* 目前没有直接进行转换的方法.必须通过string对象的c_str()方法,获取C-style的 ...
- Delphi XE 5,Rad Studio XE 5 官方下载(附破解),更新 Update 1,Help Update 1
Delphi XE 5 破解,有图有真相 Embarcadero RAD Studio XE5 Update 2 v19.0.14356.6604 (等待破解中...): http://altd.em ...
- C++中string和char字符串的异同与使用方法
C++中string和char声明字符串的异同和使用 string类 必须在头文件中包含<string> 隐藏了字符串的数组性质,可以像处理普通变量那样处理字符串 string类位于名称空 ...
- 托管C++中System::String^ 转换为 char*
https://docs.microsoft.com/en-us/cpp/dotnet/how-to-convert-system-string-to-standard-string?view=vs- ...
- C++中string转换为char*类型返回后乱码问题
问题来源: 在写二叉树序列化与反序列化时发现序列化函数为char* Serialize1(TreeNode *root) 其函数返回类型为char*,但是我在实现的过程中为了更方便的操作添加字符串使 ...
- Embarcadero RAD Studio XE5
英巴卡迪诺 RAD Studio XE是终极应用程序开发套件,能以最快速方式为Windows.Mac OS X. .NET. PHP. Web和移动设备可视化开发数据丰富.界面美观的跨平台应用程序.R ...
- RAD Studio 2010~XE8 官方 ISO 下载地址 (2015-03-28更新)
http://bbs.csdn.net/topics/390816856 RAD Studio XE8 目前最新版 v22.0.19027.8951 官方 ISO 文件下载(6.72GB):http: ...
随机推荐
- hihoCode 1078 : 线段树的区间修改
#1078 : 线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题 ...
- Azure china服务状态报告查看网址
https://www.azure.cn/support/service-dashboard/
- freeCodeCamp:Repeat a string repeat a string
重复一个指定的字符串 num次,如果num是一个负数则返回一个空字符串. /*思路 fo循环将字符串重复num次并组成数组 将数组组成新的字符串并返回 */ function repeat(str, ...
- [Chapter 3 Process]Practice 3.9 Describe the actions token by a kernel to content-switch between processes.
3.9 Describe the actions token by a kernel to content-switch between processes. 答案: 内核在进行进程上下文切换时, 首 ...
- LeetCode OJ--Swap Nodes in Pairs
https://oj.leetcode.com/problems/swap-nodes-in-pairs/ 链表的处理 /** * Definition for singly-linked list. ...
- 7.5 [bx+idata] 书中错误
这节中的问题 7.1 有错误 题目和我自己的注释为: 用 Debug 查看内存,结果如下: 2000:1000 BE 00 06 00 00 00 ... 写出下面程序执行后,ax,bx,cx中的内容 ...
- 抓发请求&设置默认工程
反向代理:外网服务器接受来自Internet的请求,转发到内网服务器. iptables转发:只有root才能使用1024以下的端口,域名的默认端口为80,一般不会给开发者提供root密码的.一台优质 ...
- 转 父表字表统计查询的sql练习
create table father( f_id number(2) primary key, f_name varchar2(10) ); create table s ...
- 【Visual Lisp】Visual Lisp属性与方法
说明:Visual Lisp属性的获取.赋值和方法的执行有多种形式.然而对于初学者来说一次性就要全部掌握显然是没有必要的,有时候每种方法都是通用的功能都一样我们就没有必要把所有方法都记住.我们只需要掌 ...
- 使用MyBatis Generator自动创建代码
SSM框架--使用MyBatis Generator自动创建代码 1. 目录说明 使用自动生成有很多方式,可以在eclipse中安装插件,但是以下将要介绍的这种方式我认为很轻松,最简单,不需要装插件, ...