QTextEdit显示中文乱码解决,中文GB2312转Unicode,QString、QByteArray 转换,16进制显示,toUtf8与toLocal8Bit区别

Qt TextEdit组件对不同编码文件的写入和显示 1.TextEdit组件对utf8编码文件的写入和显示 TextEdit组件的setPlainText方法的参数是QString,QString默认是utf8编码。此时无需转码。 写入文件 QFile File(filePath); QString str=ui->TextEdit->toPlainText(); QByteArray strBytes=str.toUtf8(); File.write(strBytes,strBytes.length()); F 阅读详情
AI摘要

本文介绍Qt中QString与QByteArray之间的转换方法,包括不同字符集如Unicode、GB2312/GBK的转换过程及注意事项。此外,还展示了如何将字符串转换为16进制显示,以及如何从16进制还原为原始字符串。

QString、QByteArray 的等效转换:

QByteArray = QString.toUtf8();// 转换为Unicode字符集编码,多字节编码,单个中文占3~4个字节

QByteArray = QString.toLocal8Bit();// 转换为GB2312/GBK字符集编码,单个中文占2个字节

 

QString = QByteArray;

 

QString、QByteArray asc2转换为16进制显示:

QByteArray可以直接转换为16进制显示:QByteArray.toHex()

 

QString不能直接转换为16进制显示,要先转换为QByteArray,再16进制显示:

QString.toUtf8().toHex()// 转换为Unicode字符集编码

QString.toLocal8Bit().toHex()// 转换为GB2312/GBK字符集编码

 

QString的16进制显示转换为 asc2显示:

QString txtBuf = "616263414243";// "abcABC"的16进制显示

QString/QByteArray str1 = QByteArray::fromHex(txtBuf.toUtf8());// 这种转换方式可忽略掉中间空格

 

QTextEdit显示GB2312中文:

GB2312/GBK/GB18030区别:https://www.zhihu.com/question/19677619

GB2312/GBK采用双字节编码。GB18030采用多字节编码,每个字可以由 1 个、2 个或 4 个字节组成。

GB2312的中文是2字节,unicode/UTF8/16的中文是3~4个字节。而Qt控件的QString都是以unicode编码的,所以gb2312编码的中文不能直接放到QString里,会显示乱码,需要做下转换:

// 将GB2312编码转换成unicode,并用QTextEdit显示

QString str = "中文";

QString sendData = QTextCodec::codecForName("GB2312")->toUnicode(str.toLocal8Bit());// 使用toLocal8Bit()转换为GB2312编码,再用QTextCodec将GB2312转换为Unicode

ui->txtSend->setText(sendData);// 中文显示正常

 

综合例程:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QString>
#include <QTextCodec>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QString str = "中文";
    // QString 与 QByteArray 相互转换
    QString sendData_1 = str.toUtf8();// 中文正常显示。sendData_1/2/x 类型为 QByteArray 也是一样的效果
    QString sendData_2 = str.toLocal8Bit();// 中文显示乱码

    // 将原码转换为16进制。为了看清内存中存储的数据内容
    QString sendData_3 = str.toUtf8().toHex().toUpper();// Unicode字符集中的"中文"编码,多字节编码,单个中文占3~4个字节
    QString sendData_4 = str.toLocal8Bit().toHex().toUpper();// GB2312/GBK字符集中的"中文"编码,双字节编码,单个中文占2个字节

    // 将QString由16进制,转换为原码,且这种方式可以忽略中间的空格
    QString sendData_5 = QByteArray::fromHex(str.toUtf8().toHex());// 中文正常显示
    QString sendData_6 = QByteArray::fromHex(str.toLocal8Bit().toHex());// 中文显示乱码

    // 将GB2312编码转换成unicode
    QString sendData_7 = QTextCodec::codecForName("GB2312")->toUnicode(str.toLocal8Bit());// 中文正常显示
    QString sendData_8 = QTextCodec::codecForName("GB2312")->toUnicode(QByteArray::fromHex(str.toLocal8Bit().toHex()));// 中文正常显示

    ui->txtSend_1->setText(sendData_1);
    ui->txtSend_2->setText(sendData_2);
    ui->txtSend_3->setText(sendData_3);
    ui->txtSend_4->setText(sendData_4);
    ui->txtSend_5->setText(sendData_5);
    ui->txtSend_6->setText(sendData_6);
    ui->txtSend_7->setText(sendData_7);
    ui->txtSend_8->setText(sendData_8);
}

MainWindow::~MainWindow()
{
    delete ui;
}

 

运行结果:

二、Qt常用容器之QByteArray 1、QByteArray介绍 Qt中对字符处理已经有QString,为什么还要引出QByteArray,因为QString中一个字符占两个字节,而传统的标准C/C++中Char/String都是一个字节为单位,而Qt库中是无缝兼容标准C/C++语法的,而在实际使用中,多机通信、交换数据等等都是使用QByteArray,这样才能达到跨平台,跨语言,跨设备,特别是嵌入式设备,大多采用C语言编程,自然是标准C库,Qt想与之通信就必须使用QByteArray,可以省去诸多转换麻烦。 QByteArray 类可以处理 阅读详情

相关推荐

Qt控件之QTextEdit文本编辑器的使用总结

可以使用setFont()函数设置字体,使用setTextColor()函数设置文本颜色,使用setTextBackgroundColor()函数设置文本背景色,或者使用insertHtml()函数插入HTML标签。要设置QTextEdit的文本内容,可以使用setText()函数或insertPlainText()函数。可以使用cut()函数实现剪切操作,使用copy()函数实现复制操作,使用paste()函数实现粘贴操作。要获取QTextEdit的文本内容,可以使用toPlainText()函数。

cl6789的博客 1713

Qt中QFile类读取ansi编码格式txt文件,在QTextEdit控件中显示乱码

Qt中QFile类读取ansi编码格式txt文件,在QTextEdit控件中显示乱码

aoxuestudy的专栏 2998

Android Studio安装常见问题详解——Android Emulator Hypervisor Driver for AMD Processors installation failed.

目录一、问题描述二、解决方案2.1 开启CPU虚拟化2.2 禁用Hyper-V2.3 使用管理员命令行在驱动程序包中执行“silent_install.bat” 一、问题描述 新买的AMD轻薄本,在安装Android Studio时遇到问题: Android Emulator Hypervisor Driver for AMD Processors installation failed. 笔记本配置为: 二、解决方案 2.1 开启CPU虚拟化 设置虚拟化的步骤这里不进行详细介绍了。如果需要,可以自行百

Wendy的博客 4万+

QTextEdit添加内容包含中文时显示乱码问题解决

QTextEdit添加内容包含中文时显示乱码问题解决 最简单的方法:#pragma execution_character_set(“utf-8”) QTextEdit *m_textShower = new QTextEdit(); (1)设置字体的方法 QFonttextFont;textFont.setPointSize(16); m_textShower->setFont(text...

wangaolong的博客 4091

实例讲解Simulink CAN通讯丢失故障判定模型搭建及仿真测试验证方法

本文通过ABS通讯丢失故障触发、判定条件Simulink模型的搭建和仿真的讲解,介绍了一种控制器CAN通讯丢失故障判定的方法和建模方法,希望能给相关技术人员带来一定参考和帮助。

qq_43011586的博客 3685

FPGA开发者必看:手把手教你用Xilinx ERNIC IP实现RoCE v2网络加速(附PG332文档解读)

本文详细解析了Xilinx ERNIC IP在FPGA平台上实现RoCE v2网络加速的全流程,包括架构设计、Vivado工程配置、驱动开发与性能调优。通过PG332技术文档的实践指导,帮助开发者快速构建低延迟、高性能的网络加速方案,适用于数据中心和边缘计算场景。

weixin_29168813的博客 668

QtextEdit乱码

一.乱码示例 1.1 乱码&正常显示 乱码: 正常显示: 二.Debug代码 2.1 .main.cpp文件 亲测有效! #include "mymainwindow.h" #include <QApplication> #include <QTextCodec> void SetCodec(QApplication &app) { QTextCodec *codec=QTextCodec::codecForName("UTF-...

qq_44424620的博客 1833

光学传播仿真软件:ASAP_(1).ASAP软件介绍与安装

ASAP(Advanced System for Analysis and Propagation)是一款强大的光学传播仿真软件,广泛应用于光学系统的设计、分析和优化。它提供了丰富的建模工具和仿真功能,可以帮助用户从简单的光学元件到复杂的光学系统进行仿真。:支持光学、机械、热学等多物理场的联合仿真。:采用高精度的算法,确保仿真结果的准确性。:内置了大量的光学元件,如透镜、反射镜、棱镜、光栅等。:提供直观的用户界面,支持多种建模和仿真方式。:支持使用脚本语言进行二次开发,增强软件的定制能力。

kkchenjj的博客 1590

qt qstring qbytearray 中文乱码

QString strGoodInfo = "银色"; strGoodInfo.replace(",\"message\":", ""); QTextCodec *codec = QTextCodec::codecForName("GBK"); QByteArray cdata = codec->fromUnicode(strGoodInfo); std::string str ...

透明 649

DTI-ALPS 指标计算(附代码),评估脑类淋巴系统功能

DTI-ALPS 指标计算(附代码),评估脑类淋巴系统功能

xxx 1049

【2025年美团春招(算法岗)-3月15日-第三题(300分)- 字符串权值】(题目+思路+Java&C++&Python解析+在线测试)

小美定义一个字符串的权值为:其长度为3的回文子序列数量。例如,“abca"的权值为2,因为包含两个回文子序列"aba"和"aca现在给定一个仅包含小写字母的字符串,小美希望你输出该字符串每个前缀的权值。

m0_73659489的博客 312

QByteArray和QString 相互转换时候的中文乱码问题

【代码】QByteArray和QString 相互转换时候的中文乱码问题。

wow_awsl_qwq的博客 4678

基于YOLO26/11/v8算法的Web目标检测系统,人脸表情识别系统,Django+Vue3 的前后端分离,实现摄像头实时识别,YOLO26/YOLO11/v8 + LLM大模型智能分析,科研必备

在人工智能迈向通用化(AGI)的今天,“视觉感知 + 语言理解”的多模态联合是未来的趋势。单纯的检测画框已经无法满足复杂的业务需求,如何让系统“看懂”画面并进行“思考”,是当前视觉项目的重点。我们知道目标检测是计算机视觉中的重要任务,广泛应用于安防监控、自动驾驶、智能家居等领域。因此本项目将 YOLO 目标检测模型(兼容 YOLO26/v11/v8 系列)与 DeepSeek 等顶流大语言模型(LLM) 进行联合,使用 Django (后端) + Vue3 (前端) 技术栈

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2838

QT 字符串转换的一个BUG

代码:  QString str = "abc"; // 第 1 行 QByteArray arr = str.toLocal8Bit(); // 第 2 行 LPCSTR pStr = arr.data(); // 第 3 行 qDebug() // 第 4 行 LPCSTR pStr1 = str.toLocal8Bit().data(); // 第 5 行 qDeb

ayang1986的专栏 1052

安装glibc出现../sysdeps/nptl/pthread.h:744:47:error:argument 1 of type ‘struct __jmp_buf_tag *‘ 解决方案

本文主要介绍了安装glibc出现…/sysdeps/nptl/pthread.h:744:47:error:argument 1 of type ‘struct __jmp_buf_tag *’ 解决方案,希望能对使用Linux的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 12万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

QString的toLocal8bit和toLatin1

执行toLocal8Bit就相当于将unicode编码的qstring转为了本地编码格式,对于windows系统,本地编码格式为GBK,linux系统为UTF-8。到了Qt5中,就把setCodecForCStrings和setCodecForTr给去掉了,并将QString()的构造函数默认调用的是fromUTF8,且Qt Creator的文件编码格式默认为UTF-8。QString的toLocal8bit和toLatin1都可以将QString转化为QByteArray,但是两者的区别在于编码的不同。

m0_52467164的博客 4615

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

QString转换QByteArray时中文问题解决方案

平常转换没怎么注意,一般QString转换成QByteArray不会出现问题,今天涉及到QJsonDocument类,转换出现以下问题: 1、用toLocal8Bit() QJsonDocument::fromJson(stringData.toLocal8Bit(), &jsonError); // 转化为 JSON 文档 if (doucment.isNull() || (jsonError.error != QJsonParseError::NoError)) { q...

u011555996的博客 4328

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Qt5通信 QByteArray接收中文字符 出现乱码 解决方法

在写qt网口通信的过程中,遇到中文就乱码。解决方法如下: 1.头文件添加 #include <QTextCodec> 2.代码如下 #include <QTextCodec> QByteArray data= tcpSocket->readAll(); QTextCodec *tc = QTextCodec::codecForName("GBK"); QString str = tc->toUnicode(data);//str如果是中文则是中文字符 .

枫影竹韵的博客 4604

Qt之GB2312\GBK字符与QString转换

在中国国内与其它数据接口通讯时,经常会遇到GB2312\GBK格式与UTF-8的字符,这时需要进行数据格式转换否则只有ASCII码正常,而其它就是乱码。

weixin_41872063的博客 4332

QString互转string中文乱码问题

QTextEdit接收QString互转string中文乱码问题

qq_35667743的博客 1634

Qt中textEdit中文出现乱码

解决方法: 在main函数中添加如下代码: #include <QtCore/QTextCodec> void main() { QTextCodec::setCodecForTr(QTextCodec::codecForName("system")); QTextCodec::setCodecForLocale(QTextCodec::codecForName("system")); QTextCodec::setCodecForCStrings(QTextCodec::codecF

qq_27577503的博客 4048

Qt数据类型转换

(1)QString 向QByteArray转换:使用QString::toUtf8(); 思路:看QString 有没有函数。 QString str="123"; QByteArray a = str.toUtf8(); (2)QByteArray 向 char *转换:QByteArray::data(); 思路:看QByteArray 有没有相应的函数; 承上: char ...

zhou8201的博客 799

Qt中实现获取中文首字母(GB2312 和 unicode以及调用Unihan实现全汉字拼音转换,支持多音字和生僻字等)和中英文数字排序功能

Qt5中可以通过qSort接口,结合QLocale类和QCollator类,可以对中文,英文,数字进行排序,但默认排序顺序为数字、英文、中文,但如果需要中英文混合排序的话,需要另外封装方法实现。 这种方法就是先获取中文的首字母,然后在进行排序。 获取中文首字母 获取中文首字母需要用到编解码规则,下面有一份代码是我在网上找到的资料,能获取中文的首字母。 使用接口的时候切记不要忘记头文件哦 #incl...

qq_36651243的博客 4007
上一篇: STM32L562开发板开箱记 STM32L562E-DK Discovery kit电路功能分析
下一篇: 【Qt串口波形绘图】基于QCustomPlot的串口波形绘图上位机,源码开放
Mark_md
博客等级 码龄11年 8万+粉丝 291原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值