【Qt 学习笔记】Qt 中出现乱码的解释及讨论


  • 博客主页:Duck Bro 博客主页
  • 系列专栏:Qt 专栏
  • 关注博主,后期持续更新系列文章
  • 如果有错误感谢请大家批评指出,及时修改
  • 感谢大家点赞👍收藏⭐评论✍

Qt 中出现乱码的解释及讨论

文章编号:Qt 学习笔记 / 06

文章目录

  • Qt 中出现乱码的解释及讨论
    • 一、为什么会出现乱码
      • 1. 在计算机中汉字占几个字节?
      • 2. 字符集
        • 2.1 ASCII 码表
        • 2.2 UTF-8
        • 2.3 GBK
    • 二、出现乱码的几种原因
    • 三、解决乱码问题的方法
    • 四、查看Qt文件的编码方式


一、为什么会出现乱码

1. 在计算机中汉字占几个字节?

在这里,考大家一个问题。在计算机中,汉字占几个字节?
回答这个问题的前提条件是当前中文编码使用的是哪种方式(字符集)

常见的字符集:ASCII、UTF-8、GBK、UTF-16

2. 字符集

字符集是一组字符的集合,用于在计算机系统中表示和处理文本数据。字符集通常由一系列字符编码组成,每个字符编码对应一个唯一的数字值。常见的字符集包括ASCII、Unicode和UTF-8等。字符集决定了可以在计算机系统中表示的字符范围和编码方式。不同的字符集支持不同的字符和字符编码,因此在处理文本数据时,需要使用相应的字符集来正确地解析和显示文本。

2.1 ASCII 码表

ASCII码表(American Standard Code for Information Interchange,美国信息交换标准代码)是一种以十进制数字表示的字符编码,共有128个字符编码,包括控制字符、标点符号、数字和字母等。
在这里插入图片描述

2.2 UTF-8

UTF-8是一种可变长度的字符编码方式,它可以用来表示世界上几乎所有的字符。它是Unicode标准的一种实现方式,通过使用1到4个字节来表示不同的字符。UTF-8编码的优点是兼容ASCII编码,对于ASCII编码中的字符使用一个字节表示,而对于其他非ASCII字符则使用多个字节表示。这使得UTF-8能够在保持兼容性的同时,使用较少的字节数来表示字符,节省了存储空间。UTF-8广泛用于互联网传输和存储文本数据的编码方式。

2.3 GBK

GBK是一种字符编码方式,全称为"Guo Biao Kuo Zhan",是中国国家标准局制定的一种字符编码规范。它在ASCII基础上进行了扩展,使用双字节表示一个字符,兼容ASCII编码,可以表示汉字以及其他特殊字符。GBK编码共收录了21003个汉字和图形符号。在GBK编码中,一个汉字占用两个字节,每个字节的范围都是0x81~0xFE。


二、出现乱码的几种原因

乱码的常见原因:编码方式不匹配所导致的

Qt中出现乱码问题的原因可能有多种,以下是一些常见的原因:

  • 字符编码不一致:在Qt中,文本通常以Unicode编码表示,而其他库或组件可能使用不同的字符编码。如果在不同编码间进行转换不正确或丢失了一些信息,就会导致乱码问题。

  • 字符编码设置不正确:Qt提供了一些函数用于设置全局字符编码,在处理文本时,如果没有正确设置编码,也会导致乱码问题。

  • 字体设置不正确:如果在显示文本时使用了不支持的字符集或者字体,就会导致乱码问题。

  • 文本文件格式不正确:如果读取的文本文件格式不正确,比如使用了不支持的编码或者文件被损坏,也会导致乱码问题。

  • 字符串截断或缺失:如果在处理文本时,不小心截断了或者丢失了一些字符,也可能导致乱码问题。

  • 系统环境设置不正确:如果系统的语言和区域设置不正确,也会导致乱码问题。


三、解决乱码问题的方法

  • 确保字符编码一致,尽量采用Unicode编码;
  • 设置正确的字符编码和字体;
  • 使用正确的文本文件格式;
  • 避免字符串截断或缺失;
  • 确保系统环境设置正确。

四、查看Qt文件的编码方式

  1. 右键点击文件,选择在Explorer中显示
    在这里插入图片描述
  2. 选中文件右键,点击编辑
    在这里插入图片描述
  3. 在记事本中的右下角显示,当前文件的编码格式(注意:显示UTF-8,说明这个文件是UTF-8编码。如果显示ANSI,则说明这个文件是GBK编码)
    在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/798536.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工单派单-saas工单处理软件效益分析,智能解决企业管理痛点亿发

企业对引入工单管理系统是有迫切需求的,工单管理系统可以有效地管理任务和工作流程,提高工作效率和客户满意度。 在没有工单管理系统之前,许多企业可能面临着诸如任务分配不清晰、信息不透明、工作流程混乱等管理挑战。举例来说,…

C#.手术麻醉系统源码 手麻系统如何与医院信息系统进行集成?

C#.手术麻醉系统源码 手麻系统如何与医院信息系统进行集成? 手术麻醉系统与医院信息系统的集成是一个关键步骤,它有助于实现信息的共享和流程的协同,从而提高医疗服务的效率和质量。手麻系统与lis、his、pacs等系统的对接是医院信息化建设的重…

Leetcode 148. 排序链表

心路历程: 这道题通过很简单,但是如果想要用O(1)的空间复杂度O(nlogn)的时间复杂度的话,可能得需要双指针快排的思路。 解法:遍历模拟 # Definition for singly-linked list. # class ListNode: # def __init__(self, val0…

Java基础入门--Java API课后题

五、编程题 1.编写一个每次随机生成 10个 0&#xff08;包括&#xff09; 到 100 之间的随机正整数。 import java.util.Random;public class Example01{public static void main(String[] args) {for(int i0;i<10;i) {System.out.println(new Random().nextInt(0,100));}}…

【黑马头条】-day05延迟队列文章发布审核-Redis-zSet实现延迟队列-Feign远程调用

文章目录 昨日回顾今日内容1 延迟任务1.1 概述1.2 技术对比1.2.1 DelayQueue1.2.2 RabbitMQ1.2.3 Redis实现1.2.4 总结 2 redis实现延迟任务2.0 实现思路2.1 思考2.2 初步配置实现2.2.1 导入heima-leadnews-schedule模块2.2.2 在Nacos注册配置管理leadnews-schedule2.2.3 导入表…

MySQL事务以及并发访问隔离级别

MySQL事务以及并发问题 事务1.什么是事务2.MySQL如何开启事务3.事务提交方式4.事务原理5.事务的四大特性&#xff08;ACID&#xff09; 事务并发问题1.并发引起的三个问题2.事务隔离级别 事务 在 MySQL 中&#xff0c;事务支持是在引擎层实现的。MySQL 是一个支持多引擎的系统&…

Java开发测试(第一篇):Java测试框架JUnit5

目录 1.基本介绍 2.maven中安装JUnit5 3.使用 4.JUnit5命名规则 5.JUnit5常用注解 6.JUnit5断言 7.JUnit5多个类之间的继承关系 8.JUnit5参数化 &#xff08;1&#xff09;使用场景&#xff1a; &#xff08;2&#xff09;使用前需在pom.xml文件中导入依赖 &#xff…

AcWing 1388. 游戏(每日一题)

原题链接&#xff1a;1388. 游戏 - AcWing题库 玩家一和玩家二共同玩一个小游戏。 给定一个包含 N 个正整数的序列。 由玩家一开始&#xff0c;双方交替行动。 每次行动可以在数列的两端之中任选一个数字将其取走&#xff0c;并给自己增加相应数字的分数。&#xff08;双方…

TCP三次握手,四次挥手

TCP为什么四次挥手&#xff1f;而不是三次&#xff1f; 正常流程&#xff1a;服务接收到 客户端的 FIN请求后&#xff0c;会发送一个ACK响应&#xff0c;等待系统资源释放后&#xff0c;再发送FIN 请求给客户端&#xff0c;客户端再发送一个ACK响应。 若为三次&#xff1a;就是…

unsigned和int相加减的错误

先看代码 #include<cstring> #include<vector> using namespace std; int main() {string s "12345678";int n s.length();cout << "n-10" << n - 10 << endl;cout << "s.length() - 10" << s.len…

第九届蓝桥杯大赛个人赛省赛(软件类)真题C 语言 A 组-航班时间

#include<iostream> using namespace std;int getTime(){int h1, h2, m1, m2, s1, s2, d 0;//d一定初始化为0&#xff0c;以正确处理不跨天的情况 scanf("%d:%d:%d %d:%d:%d (%d)", &h1, &m1, &s1, &h2, &m2, &s2, &d);return d …

基于Arduino nano配置银燕电调

1 目的 配置电调&#xff0c;设置电机转动方向&#xff0c;使得CW电机朝顺时针方向转动&#xff0c;CCW电机朝逆时针转动。 2 步骤 硬件 Arduino nano板子及USB线变阻器银燕电调EMAX Bullet 20A朗宇电机 2205 2300KV格氏电池3S杜邦线若干接线端子 软件 BLHeliSuite 注意…

数据库表设计18条黄金规则

前言 对于后端开发同学来说&#xff0c;访问数据库&#xff0c;是代码中必不可少的一个环节。 系统中收集到用户的核心数据&#xff0c;为了安全性&#xff0c;我们一般会存储到数据库&#xff0c;比如&#xff1a;mysql&#xff0c;oracle等。 后端开发的日常工作&#xff…

算法-数论-蓝桥杯

算法-数论 1、最大公约数 def gcd(a,b):if b 0:return areturn gcd(b, a%b) # a和b的最大公约数等于b与a mod b 的最大公约数def gcd(a,b):while b ! 0:cur aa bb cur%bpassreturn a欧几里得算法 a可以表示成a kb r&#xff08;a&#xff0c;b&#xff0c;k&#xff0c…

2024最新软件测试八股文,能不能拿心仪Offer就看你背得怎样了

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

Linux - mac 装 mutipass 获取 ubuntu

mutipass &#xff1a;https://multipass.run/docs/mac-tutorial mutipass list mutipass launch --name myname mutipass shell myname 获取 root权限&#xff1a; sudo su

生成式人工智能与 LangChain(预览)(上)

原文&#xff1a;Generative AI with LangChain 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 一、生成模型是什么&#xff1f; 人工智能&#xff08;AI&#xff09;取得了重大进展&#xff0c;影响着企业、社会和个人。在过去的十年左右&#xff0c;深度学习已经发…

副业选择攻略:如何找到最适合自己的那一个?

大家好&#xff0c;我是木薯。今天有个新人伙伴来咨询客服&#xff1a;新手适不适合在水牛社上做副业&#xff1f;什么样的副业适合自己&#xff1f; 这种问题其实对我们来说已经见得太多太多了&#xff0c;归其原因是因为自己对副业没有一个清晰的自我认知&#xff0c;从而感觉…

基于LEAP模型的能源环境发展、碳排放建模预测及不确定性分析

在国家“3060”碳达峰碳中和的政策背景下&#xff0c;如何寻求经济-能源-环境的平衡有效发展是国家、省份、城市及园区等不同级别经济体的重要课题。根据国家政策、当地能源结构、能源技术发展水平以及相关碳排放指标制定合理有效的低碳能源发展规划需要以科学准确的能源环境发…

Spring——框架介绍

每一个Java技术中都会存在一个“核心对象”&#xff0c;这个核心对象来完成主要任务为了得到核心对象&#xff0c;需要创建若干个辅助对象&#xff0c;从而导致开发步骤增加JDBC中 JDBC 核心对象——PreparedStatement 通过DriverManager得到数据库厂商提供的Driver对象DriverM…