编程时的编码、编码解码、编码乱码问题(ASCII、GBK、Unicode、UTF-32、UTF-8)

编程时的编码、编码乱码问题(ASCII、GBK、Unicode、UTF-32、UTF-8)

1、ASCII (American Standard Code for Information Interchange):美国信息交换标准代码是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。

在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示。

在这里插入图片描述

2、GB2312、GBK、GB18030 是汉字字符编码方案的国家标准。

https://www.bilibili.com/video/BV1xD4y1y7yc?p=1&vd_source=6d4150de67166f52e6315c8f1c296017

3、Unicode编码我们又可以叫做是统一码。在计算机科学领域中是一中业界标准,unicode编码还包含了字符集、编码方案等等。unicode编码给每个字符提供了一个唯一的数字,不论是什么平台、不论是什么程序、不论是什么语言。unicode编码的出现是为力更好的解决传统字符在编码产生的局此案问题。并且unicode编码给每种语言中的每个字符设定了统一并且唯一的二进制编码。

4、UTF-8、UTF-16 和 UTF-32 字符编码之间的主要区别在于它需要多少字节来表示内存中的字符。UTF-8 最少使用 1 个字节,而 UTF-16 最少使用 2 个字节。顺便说一句,如果字符的代码点大于 127,则 byte 的最大值则 UTF-8 可能需要 2、3 或 4 个字节,但 UTF-16 只会占用两个或四个字节。另一方面,UTF-32 是一种固定宽度的编码方案,总是使用 4 个字节来编码一个 Unicode 代码点。

在这里插入图片描述

UTF-8如果是一个字节的,第一位必须是0;如果是两个字节,第一个字节必须是110开头同时第二个字节必须是1开头;如果是三个字节,第一个字节必须是1110开头同时第二个字节必须是10开头同时第三个字节必须是10开头;第四个也是按如下图规律:

在这里插入图片描述

所以用某一种编码编写内容,然后用不同的另外一种编码解码,得到的内容就会不按照原来那套编码得到结果,也就出现乱码。

猜你喜欢

转载自blog.csdn.net/K_AAbb/article/details/127238207