qt 汉字显示
运行环境windows, 编辑语言环境:utf-8 + rom
测试代码:
#include <QCoreApplication> #include <iostream> #include <QString> #include <QDebug> #pragma execution_character_set("utf-8") int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); { QString str("你好"); qDebug() <<1 << "==>" << str; std::cout <<2 << "==>" << str.toStdString() << std::endl; std::cout <<3 << "==>" << str.toLocal8Bit().toStdString() << std::endl; printf("4 ==>%s\n", str.toStdString().c_str()); printf("5 ==>%s\n\n", str.toLocal8Bit().toStdString().c_str()); } { QString str = QString::fromUtf8("我很好"); qDebug() <<1 << "==>" << str; std::cout <<2 << "==>" << str.toStdString() << std::endl; std::cout <<3 << "==>" << str.toLocal8Bit().toStdString() << std::endl; printf("4 ==>%s\n", str.toStdString().c_str()); printf("5 ==>%s\n\n", str.toLocal8Bit().toStdString().c_str()); } return a.exec(); }
结果显示:
1 ==> "你好" 2==>浣犲ソ 3==>你好 4 ==>浣犲ソ 5 ==>你好 1 ==> "我很好" 2==>鎴戝緢濂 3==>我很好 4 ==>鎴戝緢濂? 5 ==>我很好
如果不加编译器字符控制:
1 #include <QCoreApplication> 2 #include <iostream> 3 #include <QString> 4 #include <QDebug> 5 6 //#pragma execution_character_set("utf-8") 7 8 int main(int argc, char *argv[]) 9 { 10 QCoreApplication a(argc, argv); 11 12 13 printf("测试开始了 \n\n"); 14 std::string str("这是一个std::string"); 15 { 16 printf(" str1 ---> %s\n", str.c_str()); 17 QString str2Str; 18 str2Str = QString::fromLocal8Bit(str.c_str()); 19 printf(" str2 ---> %s\n", str2Str.toStdString().c_str()); 20 printf(" str3 ---> %s\n\n", str2Str.toLocal8Bit().toStdString().c_str()); 21 } 22 23 { 24 QString str("你好"); 25 qDebug() <<1 << "==>" << str; 26 std::cout <<2 << "==>" << str.toStdString() << std::endl; 27 std::cout <<3 << "==>" << str.toLocal8Bit().toStdString() << std::endl; 28 printf("4 ==>%s\n", str.toStdString().c_str()); 29 printf("5 ==>%s\n\n", str.toLocal8Bit().toStdString().c_str()); 30 } 31 32 { 33 QString str = QString::fromUtf8("我很好"); 34 qDebug() <<1 << "==>" << str; 35 std::cout <<2 << "==>" << str.toStdString() << std::endl; 36 std::cout <<3 << "==>" << str.toLocal8Bit().toStdString() << std::endl; 37 printf("4 ==>%s\n", str.toStdString().c_str()); 38 printf("5 ==>%s\n\n", str.toLocal8Bit().toStdString().c_str()); 39 } 40 41 { 42 QString str = QStringLiteral("我很好"); 43 qDebug() <<1 << "==>" << str; 44 std::cout <<2 << "==>" << str.toStdString() << std::endl; 45 std::cout <<3 << "==>" << str.toLocal8Bit().toStdString() << std::endl; 46 printf("4 ==>%s\n", str.toStdString().c_str()); 47 printf("5 ==>%s\n\n", str.toLocal8Bit().toStdString().c_str()); 48 } 49 50 51 return a.exec(); 52 }
结果:
1 测试开始了 2 3 str1 ---> 这是一个std::string 4 str2 ---> 杩欐槸涓€涓猻td::string 5 str3 ---> 这是一个std::string 6 7 1 ==> "????" 8 2==>锟斤拷锟斤拷 9 3==>???? 10 4 ==>锟斤拷锟斤拷 11 5 ==>???? 12 13 1 ==> "????" 14 2==>锟揭很猴拷 15 3==>???? 16 4 ==>锟揭很猴拷 17 5 ==>???? 18 19 1 ==> "我很好" 20 2==>鎴戝緢濂 21 3==>我很好 22 4 ==>鎴戝緢濂? 23 5 ==>我很好