Qt:QString 编码格式问题

笔记 · 2024-10-17 · 306 人浏览
Qt:QString 编码格式问题

  QString是 Qt 编程中常用的一个类,用于存储和操作字符串。

问题描述

  在学习中因为将Qt默认编码格式给改成了GBK格式,导致在程序再次使用中文时出现乱码。如果把编码格式改回UTF-8,又会导致之前写的注释变为乱码。

解决方法

  官方手册的解释如下,大概的意思是说QString存储字符串采用的是Unicode码,每个字符是一个16位的QChar,而不是8位的char。因此,QString能够很好地处理中文字符,一个汉字在QString中算作是一个字符。对于超过65535的Unicode编码,QString则使用两个连续的QChar字符表示。

  在构造函数中说用8位字符串str初始化的字符串。使用fromUtf8()函数将给定的const char指针转换为Unicode。所以可以理解为将char*传给QString,要确保编码格式为UTF-8,否则QString在转到Unicode时会出错。

  到这里明白了出错原因,因为也是学习于是找找与UTF-8相关的,看到有QString::fromUtf8,于是就以为成功了,但并没有解决该问题,于是继续翻看文档。

  发现在我的代码中,"第%1行第%2列" 是一个普通的C++字符串字面量,它包含的是ASCII 字符和一些中文字符,可以理解为没有从UTF-8编码的字节数组开始,而是直接从字符串字面量开始,于是代码改为以下,成功解决乱码。

void Widget::oncursorPositionChanged()
{
    // 获取光标位置
    QTextCursor cursor = ui->textEdit->textCursor();
    ui->lblPosition->setText(QString::fromLocal8Bit("第%1行第%2列").arg(cursor.blockNumber() + 1).arg(cursor.columnNumber() + 1));
}

下图是来自文心一言的对比:

Qt 实验
  1. L 2024-11-20

    催更!

    1. Justin_Wu (作者)  2024-11-22
      @L

      哈哈哈,正在对线...

Theme Jasmine by Kent Liao

本网站由 又拍云 提供CDN加速/云存储服务

鄂ICP备2023005457号    鄂公网安备 42011302000815号