Sqlite默认保存数据是用UTF8格式,而现有程序开发工具
都是默认GB2312的格式,
所以你编程写的
中文不转码直接写到库里后,用任何数据库工具看肯定都是乱码。但是读出来之后仍然是GB2312,所以显示正常。反之如果你用数据库工具写中文,则默认存UTFSqlite默认保存数据是用UTF8格式,而现有程序开发工具都是默认GB2312的格式,所以你编程写的中文不转码直接写到库里后,用任何数据库工具看肯定都是乱码。但是读出来之后仍然是GB2312,所以显示正常。反之如果你用数据库工具写中文,则默认存UTFc#里面 sqlite ado 存是以 utf8存, 取的时候是以utf8格式取的,所以没问题。c++里写入是以ansi写入的,取的时候是以ansi 取的也没问题,而c++里以ansi写入 在c#里 sqlite ado以utf8取所以就出现乱码问题了。解决问题的根本就在于让 c++写入 适合sqlite 读取,也就是让c++写入时以utf8格式写入具体代码如下:string GBKToUTF8(std::string&strGBK){ string strOutUTF8 = ""wchar_t * str1int n = MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, NULL, 0)str1 = new WCHAR[n]MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, str1, n)n = WideCharToMultiByte(CP_UTF8, 0, str1, -1, NULL, 0, NULL, NULL)char * str2 = new char[n]WideCharToMultiByte(CP_UTF8, 0, str1, -1, str2, n, NULL, NULL)strOutUTF8 = str2delete[]str1str1 = NULLdelete[]str2str2 = NULLreturn strOutUTF8}
方便广大网友省一些时间!
评论列表(0条)