XPACK转QString乱码

        xpack库是可以将结构体转为json字符串或者xml的一个库。但是这个库只有头文件,没有其他的cpp或者依赖,这也是我使用的原因。在使用的过程中,发现xpack也是支持Qt的。但是需要修改config.h头文件,将原来注释掉的//#define XPACK_SUPPORT_QT注释,这样就可以在xpack里面使用Qt了。

        我们先定义一个结构体:       

struct RuleInfoItem
{
    QString _name;
    QString _icon;
    QString _group;

    XPACK(AF(F(OE, M), _name, "名称", _icon, "图标", _group, "类别"))
};

在这个结构体中,使用XPACK将变量_name_icon_group,分别转为了名称,图标,类别

接下来定义一个RuleInfoItem变量并初始化,然后使用xpack进行转换;

    RuleInfoItem xxx, ttt;
    xxx._name = QString::fromLocal8Bit("测试名称");
    xxx._icon = QString::fromLocal8Bit("测试图标.bmp");
    xxx._group = QString::fromLocal8Bit("测试编组");
    QString info = QString::fromLocal8Bit(xpack::json::encode(xxx, 1, 4, ' ').c_str());

转出来发现字符时一个乱码的json字符串:

{
    "名称": "娴嬭瘯鍚嶇О",
    "图标": "娴嬭瘯鍥炬爣.bmp",
    "类别": "娴嬭瘯缂栫粍"
}

顺这个调试发现原来xpack将QString直接转为了C++标准的string类型。

    bool encode(const char*key, const QString &val, const Extend *ext) {
        std::string str = val.toStdString();
        return ((doc_type*)this)->encode(key, str, ext);
    }

所以为了所见即所得,我们将std::string str = val.toStdString();修改为std::string str = val.toLocal8Bit().constData();这样我们得到的str就不是乱码,而是我们传进来的中文字符。

最后转出来的json字符串为:

{
    "名称": "测试名称",
    "图标": "测试图标.bmp",
    "类别": "测试编组"
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值