Sqlite3 中文乱码问题
来源:互联网 发布:秒杀器 淘宝 编辑:程序博客网 时间:2024/05/18 01:18
Sqlite3 中文乱码问题 vc9.0测试成功
http://missfeel.blog.163.com/blog/static/6768840220110201308929/
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
extern "C"
{
#include "./sqlite3.h"
};
using namespace std;
#pragma comment(lib, "./sqlite3.lib")
//UTF-8到GB2312的转换
char* U2G(const char* utf8)
{
int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
wchar_t* wstr = new wchar_t[len+1];
memset(wstr, 0, len+1);
MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len);
len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
char* str = new char[len+1];
memset(str, 0, len+1);
WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL);
if(wstr) delete[] wstr;
return str;
}
//GB2312到UTF-8的转换
char* G2U(const char* gb2312)
{
int len = MultiByteToWideChar(CP_ACP, 0, gb2312, -1, NULL, 0);
wchar_t* wstr = new wchar_t[len+1];
memset(wstr, 0, len+1);
MultiByteToWideChar(CP_ACP, 0, gb2312, -1, wstr, len);
len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
char* str = new char[len+1];
memset(str, 0, len+1);
WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL);
if(wstr) delete[] wstr;
return str;
}
//sqlite3的回调函数
//sqlite 每查到一条记录,就调用一次这个回调
int LoadMyInfo(void *para, int n_column, char**column_value, char** column_name)
{
//para是你在 sqlite3_exec 里传入的 void* 参数
//通过para参数,你可以传入一些特殊的指针(比如类指针、结构指针),然后在这里面强制转\
换成对应的类型(这里面是void*类型,必须强制转换成你的类型才可用)。然后操作这些数据
//n_column是这一条记录有多少个字段 (即这条记录有多少列)
//char**column_value 是个关键值,查出来的数据都保存在这里,它实际\
上是个1维数组(不要以为是2维数组),每一个元素都是一个 char* 值,是一个字段内容(用\
字符串来表示,以\0结尾)
//char**column_name 跟 column_value是对应的,表示这个字段的字段名称
//这里,我不使用 para 参数。忽略它的存在.
int i;
printf( "记录包含 %d 个字段\n", n_column);
for(i=0; i<n_column; i++)
{
//UTF-8转换为GB2312
printf( "字段名:%s 字段值:%s\n",U2G(column_name[i]), U2G(column_value[i]));
}
printf("------------------\n");
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
char *errmsg = NULL;
sqlite3 *db =NULL;
//用的绝对路径测试数据库,呵呵
int result = sqlite3_open("d:\\DB\\server.db3", &db);
if (result != SQLITE_OK)
{
cout<<"失败!"<<endl;
return -1;
}
cout<<"success!"<<endl;
//开始查询数据库"
char sql[100];
sprintf(sql,"select * from user where name = '张三'");
//GB2312转换为UTF-8
char * pSql = G2U(sql);
result = sqlite3_exec(db, pSql, LoadMyInfo, NULL, &errmsg);
if (result != SQLITE_OK)
{
cout<<" 查询失败!"<<endl;
}
if (pSql)
{
delete pSql;
pSql = NULL;
}
sqlite3_close(db);
return 0;
}
- Sqlite3 中文乱码问题
- Sqlite3 中文乱码
- DOS命令行下修改SQLite3中文乱码问题
- sqlite3乱码问题
- Sqlite3 命令行下中文乱码
- DOS下sqlite3乱码问题
- Sqlite3 命令行 显示中文为乱码解决方案
- android平台上SQLite3中文乱码
- sqlite3命令行查看中文乱码问题解决
- sqlite3命令行查看中文乱码问题解决
- sqlite3中第一行乱码的问题
- sqlite3问题2:中文路径的支持
- DOS命令下使用sqlite3 命令中文乱码的解决办法
- DOS命令下使用sqlite3 命令中文乱码的解决办法
- DOS命令下使用sqlite3 命令中文乱码的解决办法
- DOS命令下使用sqlite3 命令中文乱码的解决办法
- DOS命令下使用sqlite3 命令中文乱码的解决办法
- DOS命令下使用sqlite3 命令中文乱码的解决办法
- java反射类成员变量
- 在 CentOS 上安装 CPU 温度监控软件(lm_sensors)
- meta标签介绍
- 贝叶斯推断及其互联网应用(一):定理简介
- 奇异值、奇异矩阵、SVD分解、正交矩阵
- Sqlite3 中文乱码问题
- 图片裁剪器
- CSS3 -webkit-animation(动画)
- C++中using的作用
- 空间数据库之空间九交关系模型
- Android Log日志的封装类,显示类名以及行号,快速定位
- Matlab中创建.NET组件
- 贝叶斯推断及其互联网应用(二):过滤垃圾邮件
- linux后台运行和关闭、查看后台任务