c++中关于SQLite中文乱码的解决方法
来源:互联网 发布:淘宝里的转化率是什么 编辑:程序博客网 时间:2024/05/21 06:31
转载自:http://blog.csdn.net/mao_mao37/article/details/51122512
在使用SQLite的过程中(c++),如果创建一个表,如果SQL语句中包含中文字符,就会报错;如果是从数据库表中查询数据,如果数据库表中的某些字段为中文,查询结果也不能正常显示,出现这种情况的原因是因为SQLite的编码与工程的编码不一致造成的。
Sqlite的编码默认为UTF-8编码,而vc++工程中所编写的SQL语句,可能是Unciode或者ASCII码,特别是ASCII码,如果不进行转换,写入数据库以及从数据库中读出的数,都会是乱码(只针对中文字符),因此,本文主要写一下各种编码下的编码转换:
<pre class="cpp" name="code">//将ASCII码转换为UTF8编码void ASCIIToUTF8(char cACSII[] , char cUTF8[] ) {//先将ASCII码转换为Unicode编码int nlen= MultiByteToWideChar(CP_ACP,0,cACSII,-1,NULL,NULL);wchar_t *pUnicode = new wchar_t[SQL_MAX_LENTH];memset(pUnicode,0,nlen*sizeof(wchar_t));MultiByteToWideChar(CP_ACP,0,cACSII,-1,(LPWSTR)pUnicode,nlen);wstring wsUnicode = pUnicode ;//将Unicode编码转换为UTF-8编码nlen = WideCharToMultiByte(CP_UTF8,0,wsUnicode.c_str(),-1,NULL,0,NULL,NULL);WideCharToMultiByte(CP_UTF8,0,wsUnicode.c_str(),-1,cUTF8,nlen,NULL,NULL);}
//将UTF-8编码转换为ASCII编码void UTF8ToASCII(char *cUTF8 , char ASCII[]){string str = cUTF8 ;//先将UTF8编码转换为Unicode编码int nLen = MultiByteToWideChar(CP_UTF8,0,str.c_str(),-1,NULL,0);wchar_t *pwcUnicode = new wchar_t[nLen] ;memset(pwcUnicode,0,nLen*sizeof(wchar_t));MultiByteToWideChar(CP_UTF8,0,str.c_str(),-1,(LPWSTR)pwcUnicode,nLen);//将Unicode编码转换为ASCII编码nLen = WideCharToMultiByte(CP_ACP,0,pwcUnicode,-1,NULL,0,NULL,NULL);WideCharToMultiByte(CP_ACP,0,pwcUnicode,-1,ASCII,nLen,NULL,NULL);}
//将ASCII编码转换为Unicode编码void ASCIIToUnicode(char cASCII[],wchar_t wcUnicode[]){int nlen= MultiByteToWideChar(CP_ACP,0,cASCII,-1,NULL,NULL);MultiByteToWideChar(CP_ACP,0,cASCII,-1,(LPWSTR)wcUnicode,nlen);}
//将Unicode编码转换为UTF-8编码void UnicodeToUTF8(wchar_t wcUnicode[] , char cUTF8[] ){wstring wsUnicode = wcUnicode ;int nLen = WideCharToMultiByte(CP_UTF8,0,wsUnicode.c_str(),-1,NULL,0,NULL,NULL);WideCharToMultiByte(CP_UTF8,0,wsUnicode.c_str(),-1,cUTF8,nLen,NULL,NULL);}
//将UTF-8编码转换为Unicode编码void UTF8ToUnicode(char *cUTF8 , wchar_t wcUnicode[]){string sUTF8 = cUTF8 ;int nLen = MultiByteToWideChar(CP_UTF8,0,sUTF8.c_str(),-1,NULL,0);MultiByteToWideChar(CP_UTF8,0,sUTF8.c_str(),-1,(LPWSTR)wcUnicode,nLen);}
//将Unicode编码转换为ASCII编码void UnicodeToUTF8(wchar_t wcUnicode[],char cASCII[]){int nLen = WideCharToMultiByte(CP_ACP,0,wcUnicode,-1,NULL,0,NULL,NULL);WideCharToMultiByte(CP_ACP,0,wcUnicode,-1,cASCII,nLen,NULL,NULL);}
阅读全文
0 0
- c++中关于SQLite中文乱码的解决方法
- c++中关于SQLite中文乱码的解决方法
- web中关于中文乱码的解决方法
- 关于中文乱码的解决方法
- RedHat5.4中关于中文乱码的解决方法
- RedHat5.4中关于中文乱码的解决方法
- 关于jsp页面中中文乱码问题的解决方法
- 关于Java WEB项目中中文乱码的解决方法
- 关于mysql中文乱码问题的解决方法
- 关于jspsmartupload 中文各种乱码的解决方法
- 关于sublimetext3中文乱码问题的解决方法
- 关于Symbian,运行QT程序,读取和导入SQLITE数据库中中文,音标乱码的解决方案
- Ubuntu中wine中文乱码的解决方法
- 关于MYSQL无法输入中文、中文乱码的解决方法
- 中文乱码的解决方法
- 中文乱码的解决方法
- 中文乱码的解决方法
- sqlite 存取中文的解决方法
- 如何混合编译C语言和C++
- MySQL中关于JSON你不得不知道的那些事!
- ELF文件查看利器之objdump用法
- Android 7.0 WebView加载https出现空白页
- J2EE的TOMCAT服务器报The servlets named [x] and [y] are both mapped to the url-pattern[z] which is not per
- c++中关于SQLite中文乱码的解决方法
- Android ANR 分析解决方法
- SQLlite在安卓中的基本详解和简单使用
- ora 12541无监听程序
- 汉朝历史脉络图
- E/eglCodecCommon: **** ERROR unknown type 0x3a616572 (glSizeof,80)
- SpringMVC 基础教程 简单入门实例
- 解决内存泄漏问题
- PHP学习笔记——删除数组中的值实例(猴子选大王)