最近一个项目使用Qt在VS2008中开发一个客户端,由于客户端数据量较小,所以数据库使用的是SQLite3,体积小,速度快,易维护,开箱即用,很好!
开发时,使用SQLite3.exe的客户端操作SQLite的数据库文件,insert和select都没问题,支持中文支持得很好,没有乱码;但
使用SQLite3的控制台insert进去的数据,再用Qt查询出来的时候,全是乱码!
但是用Qt往SQLite的数据文件里insert进去的记录全部正常,没有乱码。
原因在于,SQLite3.exe的控制台的编码格式(在我的电脑上)是GBK,通过控制台insert到数据库中的内容是GBK格式的,但数据库默认使用的是UTF-8格式存储的,所以,数据库中存储的实际上是乱码,而Qt中的字符串使用的是Unicode编码,所以用Qt查询出来的就是乱码了~
但为什么用控制台查询出来的是正常的呢?原因还是在控制台:控制台往数据库里添加的是GBK格式的记录,这些记录被数据库保存存UTF-8;当通过控制台往外取数据的时候,取出来的还是GBK格式的数据,然后控制台使用GBK解码,所以一切正常,就像什么都没发生过一样~
同样的道理,在Qt中,使用的Unicode编码,所以,往数据库中添加的记录都是Unicode格式的;再用Qt将数据取出来,当然也是正常的文本啦~
但是这些数据在控制台中看到的就是乱码!
怎么办?你如果像我一样舍不得控制台的话,就用一个叫