加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SQLite关于转码

发布时间:2020-12-12 19:58:13 所属栏目:百科 来源:网络整理
导读:SQLite在保存中文的时候,他会默认就行UTF8到Unicode的转换,而从里面取出数据的时候它又会我们表里字符默认转成UTF8.........难道它是考虑到只跟网页的交互了吗?完全没有顾及到应用程序在用他的时候的感受,所有,我们在插入数据(带中文),跟取出数据的

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] = '';
	str.clear();

	str = strNew;
	delete[] strNew;

	return ;
}

然后是我们取到数据后,又是SQLlite这货把咱么认为成网页而默认把我们的数据转成UTF8传给我们了,所以还得进行UTF8到Unicode的转换,还是看例子:

// 获取到的中文数据的转码
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 ;
}

CW2A是将宽字符转换为同样意思的窄字符,需要包头文件 #include "atlbase.h"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读