QT5中utf8转gb2312问题

发布时间 2024-01-05 10:02:30作者: Sankye

网上找的2段代码:

 char * Gb2312_utf8(std::string strutf8, char* str)
  {
      //头文件QTextCodec
      QTextCodec* utf8Codec = QTextCodec::codecForName("utf-8");
      QTextCodec* gb2312Codec = QTextCodec::codecForName("gb2312");

      QString strUnicode = gb2312Codec->toUnicode(strutf8.c_str());
      QByteArray ByteUtf8 = utf8Codec->fromUnicode(strUnicode);

      strcpy(str, ByteUtf8.data());
      return str;
  }
  char* utf8_Gb2312(std::string strgb2312, char* str)
  {
      QTextCodec* utf8Codec = QTextCodec::codecForName("utf-8");
      QTextCodec* gb2312Codec = QTextCodec::codecForName("gb2312");

      QString strUnicode = utf8Codec->toUnicode(strgb2312.c_str());
      QByteArray ByteGb2312 = gb2312Codec->fromUnicode(strUnicode);

      strcpy(str, ByteGb2312.data());
      return str;
  }

我的蓝牙打印机只支持GB2312编码

下面这种转是可以的
utf8_Gb2312(tx.toLocal8Bit().data(),str)

 

QT中,转2312编码前,先转成8位的unicode编码可以

在qt5中,QString::toStdString()转的string的编码是utf-8

需要转unicode编码的string,用

1 QString qstr = "测试";
2 string  str = qstr.toLocal8Bit().data()

需要转utf-8编码的toStdString()

1 QString qstr = "测试";
2 string  str = qstr.toStdString();
反过来一样可以用。