网上找的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();
反过来一样可以用。