Qt中QString轉string中文亂碼問題

QString與string相互轉換可以用如下方法:

QString::toStdString();
QString::fromStdString();

數字和QString互相轉換:

QString::number(); //數字轉QString,括號裏填數字
toInt(); //QString轉數字 qstring.toInt();

然而QString直接與string相互轉換會出現中文亂碼問題,爲此Qt4中提供了三條語句

QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
//↑這兩個函數在QT5中已被去掉
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));

但是由於很多程序員完全不考慮這三行代碼是否有任何副作用,只要出現亂碼就不分青紅皁白的使用這三行代碼,造成濫用,所以在Qt5中去掉了前兩個函數

那麼應該如何解決中文亂碼的問題呢,答案當然是有的,在程序中定義如下兩個方法即可

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

string qstr2str(const QString qstr)
{
    QByteArray cdata = qstr.toLocal8Bit();
    return string(cdata);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章