计算机编码

全栈开发工程师 2020年06月18日 23次浏览

字符编码

Ascii

一个字节 8 bit 能表示256状态,表示换行和26个字母等,占用了127个字符,127后面的字符用来拓展

GB2312

一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(他称之为高字节)从0xA1用到0xF7,后面一个字节(低字节)从0xA1到0xFE,这样我们就可以组合出大约7000多个简体汉字了。
在这些编码里,我们还把数学符号、罗马希腊的字母、日文的假名们都编进去了,连在 ASCII 里本来就有的数字、标点、字母都统统重新编了两个字节长的编码,这就是常说的"全角"字符,而原来在127号以下的那些就叫"半角"字符了。

GBK

不再要求低字节一定是127号之后的内码,只要第一个字节是大于127就固定表示这是一个汉字的开始,不管后面跟的是不是扩展字符集里的内容。结果扩展之后的编码方案被称为 GBK 标准,GBK 包括了 GB2312 的所有内容,同时又增加了近20000个新的汉字(包括繁体字)和符号。

GB18030

在GBK的内容上加了几千个新的少数民族的字,GBK 扩成了 GB18030

一个汉字算两个英文字符!一个汉字算两个英文字符在这里是正确的

UNICODE

解决不同国家的不同标准问题,统一了标准
统一的"两个字节",请注意"字符"和"字节"两个术语的不同,“字节”是一个8位的物理存贮单元,而“字符”则是一个文化相关的符号。在UNICODE 中,一个字符就是两个字节。一个汉字算两个英文字符的时代已经快过去了

utf-8

UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
UTF-8的编码规则很简单,只有二条:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

BASE64

由于64个字符只需要6个位就可以表示,所以BASE64是要比源码大1/3的

例子

字符:SLF
对应ASCII码:S:83  L:76  F:70
转换成对应的二进制:
83:01010011、76:01001100、70:01000110

然后组装成010100 110100 110001 000110
补0后  00010100 00110100 00110001 00000110

对应的数字为 20  50 49 6
然后对应Base64对应是U 0 x G