Qt中QString和string互相转换的中文乱码问题

QString与string相互转换可以用如下方法:

QString::toStdString();
QString::fromStdString();
  • 1
  • 2

数字和QString互相转换:

QString::number(); //数字转QString,括号里填数字
toInt(); //QString转数字 qstring.toInt();
  • 1
  • 2

然而QString直接与string相互转换会出现中文乱码问题,为此Qt4中提供了三条语句

QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
//↑这两个函数在QT5中已被去掉
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
  • 1
  • 2
  • 3
  • 4

但是由于很多程序员完全不考虑这三行代码是否有任何副作用,只要出现乱码就不分青红皂白的使用这三行代码,造成滥用,所以在Qt5中去掉了前两个函数

那么应该如何解决中文乱码的问题呢,答案当然是有的,在程序中定义如下两个方法即可

QString str2qstr(const string str)
{
    return QString::fromLocal8Bit(str.data());
}

string qstr2str(const QString qstr)
{
    QByteArray cdata = qstr.toLocal8Bit();
    return string(cdata);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值