Qt中文乱码--使用Unicode万国码解决

需求

Qt界面开发过程中可能使用到多个语言的字符。需要解决乱码问题。

API介绍

Qt 提供类:QTextCodec Class,用来支持各种编码协议,支持:

  • ISO 2022-JP
  • ISO 8859-1 to 10
  • KOI8-R
  • KOI8-U
  • Macintosh
  • TSCII
  • UTF-8
  • UTF-16
  • UTF-32

等等一些编码协议。
Qt的QTextCodec Class类提供了很多控制编码的方法和静态函数。

  • 使用setCodecForLocale可以设置编码格式。
原因

使用MSVC编译器会使用本地编码,造成和Qt默认设置的编码冲突,编译过程中出现中文乱码。最简单的方式是:使用MinGW编译器。

具体方法
  • 将下面两行插入到man.c中的main函数中,将使用Unicode ,万国码字符编码,可以解决中文乱码问题。
#include 
int main(int argc, char *argv[]){
    QTextCodec *codec = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForLocale(codec);
}
补充

参考文献:
https://blog.csdn.net/sinat_36053757/article/details/70142078
https://blog.csdn.net/wu9797/article/details/85019490

  1. 仍然使用,但是是将字符串转换。
  • 例子
    使用codec->toUnicode()将字符串转换成uinicode万国码。
QTextCodec *codec = QTextCodec::codecForName(“GBK”);//修改这两行 
w.setWindowTitle(codec->toUnicode(“学生事务管理系统”)); 
  1. 利用QString::fromLocal8Bit()静态函数;
 w.setWindowTitle(QString::fromLocal8Bit("学生事务管理系统"));
  1. 利用QStringLiteral()函数处理字符串。
w.setWindowTitle(QStringLiteral("学生事务管理系统"));

4.指定MSVC编译器执行字符集,强制MSVC编译器采用UTF-8编码生成可执行文件。

#if _MSC_VER >= 1600	// MSVC2015 > 1899,	MSVC_VER = 14.0
#pragma execution_character_set("utf-8")
#endif
  • MSVC2010以后的编译器可以使用此方案,目前唯一支持的目标执行集是“utf-8”(引用:execution_character_set Microsoft[引用日期2018-12-16])。值得注意的是,这样可以使用tr()函数用于字符串翻译。

使用 #pragma execution_character_set(“utf-8”) 强制转换后,就不要再使用前面两种方法了,否则又乱码了,做无用功。

你可能感兴趣的:(QT,Qt,中文乱码,UTF-8)