• qt4 中文乱码处理


    UCS-2, UTF-8 和 UTF-16

    ● Unicode 编码刚开始的时候, 曾经只有 65536 个字符空间。这个空间被称为「基本多文种平面」。用恒定的两个字节表示所有字符,这种编码方式被称为 UCS-2 。
    ● 当 Unicode 字符超过 65536 之后,参考「多字节编码」,通过双字节扩展四字节的方式表示所有字符。这种编码方式被称为 UTF-16 。
    ● 为了便于网络传输和数据处理,不至于因为遇到“ \0” 而错误地以为文本结束,以及兼容 ASCII 码, UTF-8 被定义。 UTF-8 的每一个字符按规则编码为 1 ~ 4 任一字节组合。中文通常为 3 字节长。
    ● 当然,也有直接使用 4 字节编码所有字符的编码方式,被称为 UTF-32 或者UCS-4 。

    Windows 的历史遗留问题

    ● 在 Unicode 尚未成熟的年代, Windows 是使用各个国家的多字节编码,来支持每个国家的语言的。
    ● 自 WinNT 发布之后, Windows 内核的 API 全部改成使用UTF-16 的编码方式,以更好地支持多语言。但是由于历史原因, Windows 仍然保留多字节编码的 API 。 UTF-16 的 API以 W 结尾,而多字节编码以 A 结尾。
             例如 CreateWindowA 和 CreateWindowW 。

    源文件中的「多字节编码」是什么?

    ● 如果不特别说明, Qt 4.x 会认为源文件的编码是 Latin-1 (西欧语言多字节编码)。当然, Qt 5.x 已经修正这个坏习惯,默认源文件是 UTF-8来着。不过谁叫我们现在还在用 4.8 呢?

    ● 就像 std::string 做的一样, QString 可以在必要的时候由 const char* 隐式 或 显 式 转 换 而 成 。 这 个 过 程 中 使 用 的 编 码 , 就 是QTextCodec::codecForCStrings 。
    ● Qt 有一个函数, QObject::tr ,也可以将 const char*  转换为 QString 。这个过程中使用的编码方式由 QTextCodec::codecForTr 指定。
    ● 另外 QTextCodec::codecForLocale 表明当前系统所用编码。一般中文Windows 应该是 GBK 。中文 Linux 则一般为 UTF-8 。

    那么到底如何解决中文乱码问题呢?

    1、 Qt Creator 保存源文件的编码:

    2、main中添加

    1. QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8"));
    2. QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8"));

     

  • 相关阅读:
    【单片机毕业设计】【mcuclub-jj-052】基于单片机的电脑散热底座的设计
    趣学算法之动态规划
    Python中import出现路径错误总结
    面试必问 创建10个a点击弹出下标
    超800万辆「巨量」市场,谁在进攻智能驾驶「普及型」赛道
    卷积神经网络CNN
    git clone和git init git pull 的一点问题
    Netty实战(五)
    IGI60F1414A1L功率级 IC,ISO7640FMDW数字隔离器 特点
    SonarQube安装、出现启动出错并解决记录、配合idea配置使用,gradle项目配置
  • 原文地址:https://blog.csdn.net/weixin_43777852/article/details/125481792