SQLite读取中文的方案
由于SQLite3支持UTF-16,所以创建数据的时候编码方案选择UTF16而不是UTF8。 创建表然后添加数据使用下面的代码即可读出中文。他是visual studio 2008创建智能设备程序在windows ce 5.0下测试ok!
sqlite3* db;
//下面摘自网上 首先,我们说的unicode,其实就是utf-16,但最通用的却是utf-8,原因: 我猜大概是英文占的比例比较大,这样utf-8的存储优势比较明显,因为utf-16是固定16位的(双字节),而utf-8则是看情况而定,即可变长度,常规的128个ASCII只需要8位(单字节),而汉字需要24位 UTF-16,UTF-16LE,UTF-16BE,及其区别BOM 同样都是unicode,为什么要搞3种这么麻烦? 先说UTF-16BE (big endian),比较好理解的,俗称大头 比如说char 'a',ascii为 0x61,那么它的utf-8,则为 [0x61],但utf-16是16位的,所以为[0x00,0x61] 再说UTF-16LE(little endian),俗称小头,这个是比较常用的 还是char 'a',它的代码却反过来: [0x61,0x00],据说是为了提高速度而迎合CPU的胃口,CPU就是这到倒着吃数据的,这里面有汇编的知识,不多说 然后说UTF-16,要从代码里自动判断一个文件到底是UTF-16LE还是BE,对于单纯的英文字符来说还比较好办,但要有特殊字符,图形符号,汉字,法文,俄语,火星语之类的话,相信各位都很头痛吧,所以,unicode组织引入了BOM的概念,即byte order mark,顾名思义,就是表名这个文件到底是LE还是BE的,其方法就是,在UTF-16文件的头2个字节里做个标记: LE [0xFF,0xFE],BE [0xFE,0xFF] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |