关于Qt使用Redis数据库问题

        Windows环境下,使用Qt  C++连接Redis数据库的第三方库在网上很难找,资源很少。我找了好久找到一个名为QtRedis-master的开源库,可以使用,但是不支持中文。输入中文无论是存到数据库里,还是从数据库读出都是乱码,并且存储的信息不全。研究了一个星期,终于找到了病因。我把它分享出来,愿对大家有帮助。

       Redis-cli客户端和Redis-server服务端通讯采用的是Redis Resp协议,汉字的通讯编码格式是utf-8。windows中命令行模式下,默认的是GBK编码格式,要想正常在命令行模式下显示汉字必须存入Redis数据库的汉字编码格式也为GBK才行。但是若使用QtRedis-master库在Qt里做了编码格式转换,输入汉字依旧还会显示乱码。

       通过网络抓包发现,在QtRedis-master库中,向数据库发送数据时是按照英文字母的读取方式进行发送的,即每个字母按utf8转换成十六进制的一个字节。在读取汉字的时候也是按照一个字节计算,而按照Resp协议通讯时,每个汉字按照utf8编码转换成了十六进制的三个字节,这就是存入数据库后为什么显示乱码和存储不全的原因。

       把库中reader.cpp文件里的sendData发送数据函数和socketReadyRead读取数据函数做了一下修改。

void Reader::socketReadyRead()
{
    QString reply("");
    QByteArray qb_array;
    qb_array.resize(socket->readBufferSize());  //把原按照字符串读取改成按照字节读取
    qb_array=socket->readAll();
    //reply.append
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值