Qt填坑redis中文显示问题

最近公司需要使用redis作为中间件,于是我就各种找资料,最后找到一个大神开发的qRedis下载地址,这个是大神使用socket开发,由衷佩服,这里膜拜一下,里面有使用事例,用起来超简单,这里鄙视一下国内分享环境,用国外大神的资源,拿来CSDN赚积分,很无语。
中途用的时候弄了一上午,SET老失败,GET成功,也就是只能读不能写,然后各种找原因,最后发现是之前的redis服务器配置应该有问题,弄成只能读不能写,后来我自己建了redis服务器就搞定了。
然后主要问题来了,Qt使用redis传输中文问题,大神因为是外国人没有中文的烦恼所以没有考虑进去,我就想好吧,那就从网络编程开始弄,这类资料网络上很多,这里就不赘述。最后,找到国内大神潮落拾贝
这里感谢一下,然后愉快的复制粘贴,结果还是坑,不报错了,结果给各位上图中文转成Hex,相当于还是乱码
然后把大神的 QByteArray qb_byte=qs_part_i.toLocal8Bit();改成QByteArray qb_byte = qs_part_i.toUtf8();就完美搞定,如下图
完美搞定

由于本人小白,看到大神文章写到sendData时只有一半,所以不知所措,整个替换发现还是坑,怀疑大神逗我,结果是我菜,不关大神任何事,为了照顾小白,在此我把我更改过的代码贴出来,以防小白懵逼(主要怕日后自己懵逼),经过此事我发现不是没答案,而是我等小白看不懂。

void Reader::sendData(const QString &data)
{
    if (!reading)
        return;
        
    QString test(data);

    int k;

    QChar c,next;
    QStringList parts;
    QString buffer="";
    bool open=false;
    for(k=0;k<test.length();k++)
    {
        c=test.at(k);
        if(open)
        {
            next=k<test.length()-1?test
                       .at(k+1):' ';
            if(c=='\\'&&next=='"')
            {
                buffer+='"';
                k++;
            }
            else if(c=='"')
                open=false;
            else
                buffer+=c;
        }
        else
        {
            if(!c.isSpace())
            {
                if(c=='"')
                    open=true;
                else
                    buffer+=c;
            }
            else if(!buffer.isEmpty())
            {
                parts<<buffer;
                buffer="";
            }
        }
    }
	
    if(!buffer.isEmpty())
    {
        parts<<buffer;
    }
	QByteArray qb_array;
	qb_array.clear();
	qb_array.append(QString("*%1\r\n").arg(parts.length()));

	int i;
	for (i = 0; i < parts.length(); i++)
	{
		QString qs_part_i = parts.at(i);
		QByteArray qb_byte = qs_part_i.toUtf8();

		qb_array.append(QString("$%1\r\n").arg(qb_byte.length()));

		for (int j = 0; j < qb_byte.length(); j++)
		{
			qb_array.append(qb_byte[j]);
		}
		qb_array.append(0x0D);
		qb_array.append(0x0A);

	}
	int i_len = qb_array.length();
	socket->write(qb_array, i_len);
	while (!socket->waitForBytesWritten())
	{

	}
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值