QString 中文编码转换

参考:https://blog.csdn.net/xxm524/article/details/74937308

QT字符编码开发中遇到了很多坑,一不小心就会出现中文乱码, 在这里小结一下。

  1.  QString本身是编码是unicode
  2. 在windows下local8Bit是GBK
  3.  源代码即.cpp文件是有编码的,不同编译器也有默认编码,如:
    • 微软VS的中的cl采用GBK
    • Mingw中的g++不带BOM的UTF-8 
    • Linux下的g++ 采用带BOM的UTF-8 这3中编码进行保存
(所以,在代码中hard code中文时, 要搞清楚使用的编译器本身的编码格式)


  1.  
    QString GBK2UTF8(const QString &str)
  2.  
    {
  3.  
    QTextCodec *utf8 = QTextCodec::codecForName("UTF-8");
  4.  
    return utf8->toUnicode(str.toUtf8());
  5.  
    }
  6.  
     
  7.  
    QString UTF82GBK(const QString &str)
  8.  
    {
  9.  
    QTextCodec *gbk = QTextCodec::codecForName("GB18030");
  10.  
    return gbk->toUnicode(str.toLocal8Bit());
  11.  
    }
  12.  
     
  13.  
    std::string GBK2UTF8(std::string &str)
  14.  
    {
  15.  
    QString temp = QString::fromLocal8Bit(str.c_str());
  16.  
    std::string ret = temp.toUtf8().data();
  17.  
    return ret;
  18.  
    }
  19.  
     
  20.  
    std::string UTF82GBK(std::string &str)
  21.  
    {
  22.  
    QString temp = QString::fromUtf8(str.c_str());
  23.  
    std::string ret = temp.toLocal8Bit().data();
  24.  
    return ret;
  25.  
    }


参考文章:

http://blog.csdn.net/ak47zhangzhiwei/article/details/7895422


 
原文地址:https://www.cnblogs.com/kuangke/p/14702373.html