两年前的自学笔记,直接转载本人印象笔记上的内容,如若侵权请联系我
1.base64
使用其编码后的文本只包含64个ASCII码字符(偶尔加一个填充字符=),64个字符如下表
从000000(0)到111111(63)
A-Z:0-25
a-z:26-51
0-9:52-61
+:62
/:63
索引 | 字符 | 索引 | 字符 | 索引 | 字符 | 索引 | 字符 |
0 | A | 17 | R | 34 | i | 51 | z |
1 | B | 18 | S | 35 | j | 52 | 0 |
2 | C | 19 | T | 36 | k | 53 | 1 |
3 | D | 20 | U | 37 | l | 54 | 2 |
4 | E | 21 | V | 38 | m | 55 | 3 |
5 | F | 22 | W | 39 | n | 56 | 4 |
6 | G | 23 | X | 40 | o | 57 | 5 |
7 | H | 24 | Y | 41 | p | 58 | 6 |
8 | I | 25 | Z | 42 | q | 59 | 7 |
9 | J | 26 | a | 43 | r | 60 | 8 |
10 | K | 27 | b | 44 | s | 61 | 9 |
11 | L | 28 | c | 45 | t | 62 | + |
12 | M | 29 | d | 46 | u | 63 | / |
13 | N | 30 | e | 47 | v | ||
14 | O | 31 | f | 48 | w | ||
15 | P | 32 | g | 49 | x | ||
16 | Q | 33 | h | 50 | y |
文本转化为base64的方式如图:
原文 | 3 | & | ||||||||||||||||||||||
ascii码 | 51 | 38 | ||||||||||||||||||||||
二进制 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
base64索引 | 12 | 50 | 24 | |||||||||||||||||||||
对应字符 | M | y | Y | = |
3个字符转化为24位二进制编码,再转化为4位base64码,若字符数量不为3的倍数,则转化二进制后用0填满剩余位置,并在转化时将其转化为=。需要注意base64中A也由6个0的二进制编码转化而来,但一个有实际意义一个只为填充,要注意区分。
2.ascii
数字0~9对应的ASCII码(十进制)为“48”~“57”
大写字母A~Z对应的ASCII码(十进制)为“65”~“90”
小写字母a~z对应的百ASCII码(十进制)为"97"~“122”
空格32
仅对照表转换,没有其他需要注意的
3.unicode
unicode可以表示所有字符,ascii的128-255位不同国家定义常不同,所以有了unicode
例如:啊的unicode码为21834,对应二进制数为101010101001010,有15位,按照8位一字节来看也就是需要2字节。由于汉字数量庞大,排在后面的汉字需要更多的字节,最大的为4字节。
计算机识别存储的二进制数时,难以区分2字节的为一个汉字还是两个单字节的字符,如果把所有字符都用最大的4字节表示,剩余部分填充0,又会造成空间浪费,占用的空间变为了原来的1-4倍。
所以有了接下来的utf8编码方式
4.utf-8
utf8编码方式的一大特点为可变长,可以使用1-4个字节表示一个字符。
单字节:第一位为0,后面七位对应unicode码。对ascii码0-127的字符,utf8码与ascii码是完全相同的
两字节:第一个字节三位为110,第二个字节前两位为10,其余填进unicode码
三字节:第一个字节1110,第二个字节110,第三个字节10,其余填进unicode码
四字节:第一个字节11110......
如何得知一个字符是几字节?
若unicode码为0000 0000-0000 007F,一字节
若unicode码为0000 0080-0000 07FF,两字节
若unicode码为0000 0800-0000 FFFF,三字节
若unicode码为0001 0000-0010 FFFF,四字节
例如:啊的unicode码为21834,16进制为0000 554A,即转换为utf8为三字节
转换为二进制数:101010101001010,那么utf8码为11101010 11010101 10001010
也就是0xFA 0xD5 0x8A