sqlite在保存中文的时候,他会默认就行UTF8到Unicode的转换,而从里面取出数据的时候它又会我们表里字符默认转成UTF8.........难道它是考虑到只跟网页的交互了吗?完全没有顾及到应用程序在用他的时候的感受,所有,我们在插入数据(带中文),跟取出数据的时候,就得对字串进行一番转码了。
首先看看存储的时候,把Unicode转为UTF8,然后交给sqlite,它把它认为是从网页上来的数据默认进行UTF8到Unicode的转换,这时,我们在表里看到的数据才是我们所熟悉的Unicode, 废话不说了,直接上例子。
// 获取到的中文数据的转码voID UTF8TransCoding(string &str){ int len = WIDeCharToMultiByte(CP_UTF8,CA2W((char*)str.data()),-1,NulL,NulL); char *strNew = new char[len+1]; WIDeCharToMultiByte(CP_UTF8,strNew,len,NulL); strNew[len] = '// 获取到的中文数据的转码voID Change(string &str){ int len = MultiBytetoWIDeChar(CP_UTF8,str.data(),0); WCHAR *strNew = new WCHAR[len+1]; MultiBytetoWIDeChar(CP_UTF8,len); str.clear(); str = CW2A(strNew); delete[] strNew; return ;}'; str.clear(); str = strNew; delete[] strNew; return ;}
然后是我们取到数据后,又是sqllite这货把咱么认为成网页而默认把我们的数据转成UTF8传给我们了,所以还得进行UTF8到Unicode的转换,还是看例子:
#include "atlbase.h"CW2A是将宽字符转换为同样意思的窄字符,需要包头文件 总结
以上是内存溢出为你收集整理的SQLite关于转码全部内容,希望文章能够帮你解决SQLite关于转码所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)