在QT中,输出中文出现乱码,比如使用QString或者tr()均出现乱码。
微软VC编译器源代码使用GB2312编码进行保存。" 我是汉字 " 是C语言中的字符串,它是char型的窄字符串。保存成带BOM的UTF-8,用微软cl编译器时,汉字本身是UTF-8编码,但程序内保存时却是对应的GBK编码。QString 内部采用的是Unicode。当你需要从窄字符串 char* 转成Unicode的QString字符串的,你需要告诉QString你的这串char* 中究竟是什么编码?设置QString默认采用的编码。而究竟采用哪一个,一般来说就是源代码是GBK,就用GBK,源代码是UTF-8就用UTF-8。
解决办法:【注意:选用一种方法即可,不要同时使用多种防止中文乱码的方法】
1)预处理,根据设置的本地字符集转换,能正确转换含有中文的QString。
#pragma execution_character_set(“utf-8”)
//在要加中文的cpp或h文件加入该预处理,设置本地字符集转换,VC编译器把字符串常量按照UTF-8编码
2)fromLocal8Bit() 可以把中文转为Unicode
如:QString::fromLocal8Bit(“我是中文字符”);
3)QStringLiteral() 也可以使用
如:QStringLiteral(“我是中文字符”);