qt 中文 编码 解码 乱码 解决 记录 LTS

本文深入探讨了字符编码的概念,包括ASCII、UTF-8和GBK编码系统。解释了编码和解码的过程,以及它们在存储和显示文字时的作用。通过例子展示了相同文字根据不同编码格式会得到不同二进制数据,并讨论了Python中encode()和decode()方法在字符串转换中的应用。此外,还提到了在Qt中处理中文字符编码问题的解决方案。
摘要由CSDN通过智能技术生成

中文 编码 解码

内存中,或者是磁盘中的 一组 二进制数据,
比如 b’\xe4\xb8\xad\xe6\x96\x87’
按照 ‘utf-8’ 解析,decode ,解码,是字符串’中文’
按照 ‘gbk’ 解析,decode 解码,是另外的 字符串

同样一个二进制数据 ,根据解读格式的不同,可以解读成不同的 可读文字

那么 同样的一个 可读文字 ,比如’hello’, 可以根据不同的 编码格式,
编码成 不同的 二进制数据,以存放在磁盘文件中,或者内存中.
你把字符串 'hello’编码为 GBK格式,的二进制串是一组数据
你把字符串 'hello’编码为 UTF-8 格式,又是另外一组二进制串数据

编码和 解码是针对 二进制数据 这个角度说的

Python encode()和decode()方法:字符串编码转换

编码的由来 encode

书本上面的 文字和数字 ,
海报上面的文字和数字

这些现实中的 肉眼可以看到的,
在纸片上面或者显示器上面 文字 和数字。
他们其实 都是 一个一个的图形。
类似于 三角形,正方形,五角星等图形。

显示器和印刷机 都是点阵,通过点阵的亮灭来,显示不同的图形。
这些文字和数字 都是图形。

电脑的硬盘 是二进制 01 方式存储数据的。
如果需要把这些文字和数字 形式的图形,保存到硬盘上面。
可以直接保存 上面说的 点阵。
等需要显示在显示器屏幕上面的时候,直接通过程序读取硬盘,然后再显示器上面显示。
但是这样有局限性。
因为 同一个 文字 A,在屏幕上面显示,有时候很大,有时候很小,有时候中等。
这样 同一个 文字 A,不同的尺寸,需要每个尺寸,都保存一份,有点浪费硬盘空间了。
因为硬盘可以是保存10万本书。显示器每次只显示一页纸张的文字。
可以在需要显示这一页的时候,通过程序计算在内存中或者显存中,临时生成需要显示的点阵图形。
然后显示在屏幕上面。

这样就把 文字 A ,给抽象一下,只表示他的 本意,文字上面的意义。

比如 数字 5,在电脑中存储 ,使用二进制 0000 0101
比如 字母 A ,在电脑中存储,使用二进制 0100 0001

运行在电脑中的 程序,读到 硬盘中的 0100 0001 的时候,就在显示器上面显示 一个字符A的图形。
运行在电脑中的 程序,读到 硬盘中的 0000 0101的时候,就在显示器上面显示 一个字符5的图形。

上面的过程 ,就是 对 抽象的 5 和 A 编码,编码成 计算机认识的二进制数据。
把一个需要显示在屏幕上面的图形,存储到电脑上面,最后再次显示出来,需要一个映射。
就是对这个图形的编码。
把电脑中的一串 二进制数字,解析成为一个图形,就是解码。

编码的目的是把这个图形 ,记住,写到电脑的硬盘中。
解码的目的 是把这个图形 从 电脑的硬盘中读取出来,显示在 显示器上面。

显示在屏幕上的 同一个图形,比如A,根据不同的编码规则,有多重 编码方法。

可以是 占一个字节 0100 0001。
也可以是 0000 0000 0100 0001 占两个字节。

也就是把 图形A 保存到 电脑硬盘中,可以有不同的形式的二进制数据 。

那么程序在 读取 硬盘中的二进制数据的时候,需要知道 这些二进制数据 是用的什么映射规则,
把什么图形 ,按照 什么规则 ,映射成的二进制数据,然后再 逆向回 对应的图形。

ASCII码 编码

ASCII 是 编码系统
ASCII 是一套电脑编码系统 ,
是对拉丁字母 的一套电脑编码系统
是现今最通用的单字节编码系统
是对128个字符 字符,进行编码
在这里插入图片描述

看上面的图,对 字符 A 这个图形,进行编码 ,编码成 0100 0001
把A 编码成 0100 0001 ,存放在 硬盘上面。
当读取硬盘 读取到 0100 0001 的时候,如果按照ASCII规则,在显示器上面就显示他为 图形A。

编码是 对 图形 A 编码。编码是执行的那个编码规则,ASCII码,编码规则。
解码是 对 0100 0001 这个二进制数据,就行解码。解码是按照的 ASCII码 规则,进行解码。

下面是官方的解析:

ASCII(American Standard Code for Information Interchange,美国信息互换标准代码,ASCⅡ)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。

ASCII第一次以规范标准的型态发表是在1967年,最后一次更新则是在1986年,至今为止共定义了128个字符,其中33个字符无法显示(这是以现今操作系统为依归,但在DOS模式下可显示出一些诸如笑脸、扑克牌花式等8-bit符号),且这33个字符多数都已是陈废的控制字符,控制字符的用途主要是用来操控已经处理过的文字,在33个字符之外的是95个可显示的字符,包含用键盘敲下空白键所产生的空白字符也算1个可显示字符(显示为空白)。

1

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
字符 ‘5’ 按照 ascii 编码是 ‘0011 0101’
按照 ascii hex 编码是 ‘35’
按照ascii十进制 编码是 ‘53’
原本有 单引号,编码后的 ,也给加上单引号.

Qt解决中文字符为奇数个报错的问题

https://blog.csdn.net/prefect_boy/article/details/86599570

把文件保存成带bom的utf8 msvc2015可以 10没试过

在这里插入图片描述
。。。。。。。。
终 于 搞 定 了???
不不不。。。。。
还有一步,即使这样,可能你的电脑上会出现乱码!!!
解决办法:
乱码解决办法:

#pragma execution_character_set("utf-8");

在.cpp文件中加入这个,就OK啦

#pragma execution_character_set("utf-8");
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QString profilePath = "在目录";
    fprintf(stderr, "profilePath: %s\n", profilePath.toUtf8());

    fprintf(stderr, "profilePath: %s\n", profilePath.toLocal8Bit().constData());

    fprintf(stderr, "profilePath: %s\n", qPrintable(profilePath));

    MainWindow w;
    w.show();

    return a.exec();
}

在这里插入图片描述
工具 ---- 选项 ---- 文本编辑器 —

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值