Qt的乱码解决方案

    技术2022-07-12  69

    一、解决方法

    1.Qt文档推荐的方法

    所有文件选择使用UTF-8编码存储

    所有文件包括源文件,读写文件等。

    对所有可见的字符串文本使用QStringLiteral 或 QString::fromUtf8()对所以用户可见的字符串使用tr()

    2.执行全局函数设置编码格式

    1.Qt5之后 在main函数的QApplication之后,实例之前,调用

    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));

    2.Qt5之前 通过QTextCodec调用全局函数setCodecForCStrings、setCodecForLocale、setCodecForTr来设置QString、本地、翻译项的字符集。

    3.添加宏,设置执行字符集

    条件:保证源代码文件是UTF-8

    #if defined(_MSC_VER) && (_MSC_VER >= 1600) # pragma execution_character_set("utf-8") #endif

    若源代码文件不保证是UTF-8,则源文件中的中文可用QStringLiteral进行处理。


    二、 一些关于编码的小知识

    源字符集

    1、概念 保存源文件所使用的字符编码

    这里的字符编码,有时候会说成字符集,但字符集又通常指的是多种字符编码所组成的集合

    2、作用: 用于解析源文件的代码。打个比方,读懂项目源码必须知道它所使用的编程语言。

    一般而言,在仅使用ASCLL字符时,无须关注源字符集,对于汉字,由于不同编码的解析是不同的,所以需要特别注意。

    执行字符集

    1.概念及作用 源文件中的代码经过编译器的解析后,翻译成计算机看得懂的二进制代码(可执行程序),而字符串及字符常量则以某种编码进行存储在内存中。

    此处的某种编码正是执行字符集

    Processed: 0.012, SQL: 10