QT 编码问题

QT中的编码问题

  • QT中中文支持其实还是可以的,只是初期没有掌握的时候会比较懵逼,网上又有些是QT4版本时期的解决方案,导致我刚开始在面对编码问题的时候头疼
    ui->textBrowser->append(ui->lineEdit->text());

    qDebug() << ui->lineEdit->text();
    qDebug() << ui->lineEdit->text().toStdString().c_str();
    qDebug() << ui->lineEdit->text().toUtf8().toStdString().c_str();
    qDebug() << ui->lineEdit->text().toLocal8Bit().toStdString().c_str();
    qDebug() << ui->lineEdit->text().toUtf8();
    qDebug() << ui->lineEdit->text().toLocal8Bit();
    ui->lineEdit->clear();
  • 简单的写一个程序,从lineEdit里直接拿字符串到textBrowser


    QT 编码问题_第1张图片
    image.png
  1. 可以看到只有最后一个是乱码
  2. toUtf8 转换后是 UTF8编码格式的字符串
  3. toLocal8Bit 转换后是ANSI编码格式的字符串
  4. 在默认情况下控件能都是用的UTF8编码格式在显示

QT常量字符串乱码

QT 编码问题_第2张图片
image.png
  • 大概大家都能遇到这个问题,很是烦人
  • 原因上面已经分析出来了,很明显这个默认的常量字符串不是UTF8编码的需要转换成UTF8编码才能正常显示
  • fromLocal8Bit 表示原字符串格式是GBK/GB2312格式的字符串
    ui->textBrowser->append(QString::fromLocal8Bit("有咸斋"));
  • 常量转换成了UTF8放进textBrowser才正常显示


    QT 编码问题_第3张图片
    image.png
  • 那么对于winapi要使用字符串的地方也是同理,需要先做编码转换再进行传递,虽然有点烦,但是考虑到UTF8的广泛性,其实多写一点转换没有什么问题.万一来个多语言,用GBK不是死翘翘

总结QString的功能其实挺不错的,包括各种转换都考虑到了,有时候是没有理解到其内部机制导致对编码问题不理解.其实耐心解决这个问题应该不是问题,毕竟人早就给你写好了,你去用就好了...

你可能感兴趣的:(QT 编码问题)