字符串转换时须要先将ANSI转换成UTF8,在字符串前面加L,即L“个人字符串”;sql
再利用Unicode 转 Utf8 函数:数据库
std::string Unicode2Utf8(const std::wstring& widestring) { int utf8size = ::WideCharToMultiByte(CP_UTF8, 0, widestring.c_str(), -1, NULL, 0, NULL, NULL); if (utf8size == 0) { throw std::exception("Error in conversion."); } std::vector<char> resultstring(utf8size); int convresult = ::WideCharToMultiByte(CP_UTF8, 0, widestring.c_str(), -1, &resultstring[0], utf8size, NULL, NULL); if (convresult != utf8size) { throw std::exception("La falla!"); } return std::string(&resultstring[0]); }
主函数使用:ide
int main() { open_db(); //create_table(); //drop_table(); insert_data(00010, "minda", const_cast<char *>(Unicode2Utf8(_T("测测测测测")).c_str())); //insert_data(9,"minda","测测测测测"); //insert_data(2, "yuan", "测测测"); //insert_data(7, "www","chifan"); //search_data(1); search_data("minda"); delete_data("yuan"); system("pause"); return 0; }
数据库的使用及上面几个函数(open_db,create_table等函数)的定义,在上一篇博客中有详细给出,参看对应网址中的代码便可,拷贝便可使用
遇到几个问题,具体警告不记得了,如下的方法能够都试试:
解决方法以下:项目属性中---->C++ -------> 预处理器 ------------> 预处理器定义 ----------> 加一个_X86_
函数
另一个问题是:sqlite3.c 编译不过
解决方法:不使用预编译头
.net
从sqlite中输出中文时,一直显示不对,缘由一是格式问题:UTF8先要转换成unicode类型3d
std::wstring UTF8ToUnicode(const string& strin) { wstring strOut; int dwNum = MultiByteToWideChar(CP_UTF8, 0, strin.c_str(), -1, 0, 0); wchar_t* pBuffer = new wchar_t[dwNum]; if (!pBuffer) { return strOut; } memset(pBuffer, 0, dwNum * sizeof(wchar_t)); if (MultiByteToWideChar(CP_UTF8, 0, strin.c_str(), -1, pBuffer, dwNum) >= 0) { strOut = pBuffer; } delete[] pBuffer; return strOut; }
另外一个大坑就是最后使用wcout输出,控制台一直没有内容,缘由就在wcout这个函数上面,具体缘由能够参看此篇博客 https://blog.csdn.net/querw/article/details/6690954
可是这篇博客中给出的方法不能用(是我技术渣不会用),后来找的一个方法,能够正确输出中文,只需在输出时添加两句话,而且须要包含头文件 #include
这样最终就能正常显示拉~
sqlite