003字符编码

字符编码

我们知道计算机只识别0和1。(数字电路里只有两种电平状态,一个是高电平,一个是低电平。人为定义用 1 指代高电平的,被定义为正逻辑表示,0指代低电平的,被定义为负逻辑表示。)

我们平时的文件(程序也是一堆文件)都是存放在硬盘中,举个例子word文档存在硬盘中,当我们打开word文件时候,计算机将word文件读到内存中,这个过程就是将人类看得懂的转换成计算器看得懂的过程。当我们写完word保存时,就是将内存中的文件保存到硬盘中。整个过程都是涉及到字符与数字0和1的转换。

过程:字符---------->翻译-------->数字 0和1

所以这个翻译的过程就需要我们有一张码表,把字符和数字一一对应起来。

最开始只有一个叫ASCII的码表,此表只规定了英文字母数字和一些特殊字符与数字的对应关系。最多只能用 8 位来表示(一个字节)所以ASCII码最多只能表示 256 个符号。


image.png

字节也叫Byte,是计算机数据的基本存储单位。
8bit(位)=1Byte(字节)
1024Byte(字节)=1KB
1024KB=1MB
1024MB=1GB
1024GB=1TB

但是不同国家有不同语言,中文、日文、韩文、德文等等。所以每个国家的就自己制定了相应的码表,中文的字符上千个,一个字节最多只有256个字符,不够用,就要增加字节。

中文---> gb2312编码
日文---->Shift_JIS编码
韩国---->Euc-kr编码

当各个国家都制定了自己的码表,这样就不免有冲突,比如在一个多语言的文本中,就会出现乱码。我写一个中文英文日文的文本就会出现乱码,所以就需要制定一个编码,把所有语言都统一到这套编码里,于是unicode应运而生。

ascii用1个字节(8位二进制)代表一个字符。
unicode常用2个字节(16位二进制)代表一个字符,生僻字需要用4个字节。

字母A --->ASCII码表十进制是65,二进制是0100 0001
字母A ---> unicode码表二进制是 00000000 01000001,只要在前面补上八个0就行。
中文“中” ----> ASCII码表中没有对应
中文“中” ----> unicode码表 01001110 00101101

所以unicode兼容各国码表,解决了乱码问题。但是如果我们的文本都是用英文写的,unicode比ASCII多出一倍的空间,在存储和读取上效率就低了。

本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间。


Snip20190903_28.png

ASCII编码实际上可以被看成是UTF-8编码的一部分,所以以前支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作。

1、在存入磁盘时,需要将unicode转成一种更为精准的格式,utf-8:全称Unicode Transformation Format,将数据量控制到最精简

2、在读入内存时,需要将utf-8转成unicode。

Snip20190903_29.png
Snip20190903_30.png

你可能感兴趣的:(003字符编码)