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

Sqlite中文乱码问题

发布时间:2020-12-12 19:32:25 所属栏目:百科 来源:网络整理
导读:向Sqlite中写中文时候, sqlite是用的UTF-8编码的,所以要转码 // 获取到的中文数据的转码 pre name="code" class="cpp"void UTF8Transcoding(string str) { int len = WideCharToMultiByte(CP_UTF8,CA2W((char*)str.data()),-1,NULL,NULL); char *strNew =

向Sqlite中写中文时候,sqlite是用的UTF-8编码的,所以要转码

// 获取到的中文数据的转码 <pre name="code" class="cpp">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 ;  
}  

 但是你从数据库中读数据又要转回来: 
 

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

 
 

一段例子

#include "stdafx.h"
#include <windows.h>  
#include "atlbase.h"
#include<string>
#include "sqlite3.h"  


using namespace std;
void UTF8Transcoding(string &str)
{
	int len = WideCharToMultiByte(CP_UTF8,NULL);

	char *strNew = new char[len + 1];

	WideCharToMultiByte(CP_UTF8,NULL);

	strNew[len] = '';
	str.clear();

	str = strNew;
	delete[] strNew;

	return;
}


int _tmain(int argc,_TCHAR* argv[])
{
	char *errMsg;
	int rc;
	sqlite3 *db;
	rc = sqlite3_open("033001.db",&db);
	auto sql = _T("create table if not exists user(ID varchar(20),Name varchar(20),Age int,Nation varchar(20),Major varchar(20));");
	if (rc == SQLITE_OK)
	{
		//MessageBox(NULL,_T("打开数据库成功!"),_T("消息"),MB_OK | MB_ICONWARNING);
		rc = sqlite3_exec(db,CW2A(sql,CP_UTF8),&errMsg);
		if (rc != SQLITE_OK)
		{
			printf("创建表失败,错误码:%d,错误原因:%sn",rc,errMsg);
			MessageBox(NULL,_T("创建表user失败!"),_T("错误"),MB_ICONWARNING);
		}


		for (int i = 1; i < 6; i++)
		{
			char c2[20] = "";
			c2[0] = i + '0';

			char c1[128] = "insert into user values('01','张三',";
			char c3[128] = ",'汉','软件');";
			strcat(c1,c2);
			strcat(c1,c3);


			string temp = c1;
			UTF8Transcoding(temp);
			const char* temp_c = temp.data();;
			rc = sqlite3_exec(db,temp_c,&errMsg);
			if (rc != SQLITE_OK)
			{
				printf("插入数据失败,错误码:%d,errMsg);
				MessageBox(NULL,_T("插入数据失败!"),MB_ICONWARNING);
			}

		}

	}
	return 0;
}

(编辑:李大同)

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

    推荐文章
      热点阅读