编码形式:base64、ascii、unicode、utf8

两年前的自学笔记,直接转载本人印象笔记上的内容,如若侵权请联系我

1.base64

使用其编码后的文本只包含64个ASCII码字符(偶尔加一个填充字符=),64个字符如下表

从000000(0)到111111(63)

A-Z:0-25

a-z:26-51

0-9:52-61

+:62

/:63

索引

字符索引字符索引字符索引字符
0A17R34i51z
1B18S35j520
2C19T36k531
3D20U37l542
4E21V38m553
5F22W39n564
6G23X40o575
7H24Y41p586
8I25Z42q597
9J26a43r608
10K27b44s619
11L28c45t62+
12M29d46u63/
13N30e47v
14O31f48w
15P32g49x
16Q33h50y

文本转化为base64的方式如图:

原文3&
ascii码5138
二进制001100110010011000000000
base64索引125024
对应字符MyY=

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

仅对照表转换,没有其他需要注意的


ascii码表

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值