1、base64
base64把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。
关于这个编码的规则:
1、把3个字符变成4个字符。
2、每76个字符加一个换行符。
3、最后的结束符也要处理,不足的用=补位。
原文的字节数量应该是3的倍数,如果这个条件不能满足的话:原文剩余的字节根据编码规则继续单独转(1变2,2变3;不够的位数用0补全),再用=号补满4个字节。这就是为什么有些Base64编码会以一个或两个等号结束的原因,但等号最多只有两个.
编码过程:
第一个字符通过右移2位获得第一个目标字符;
然后将第一个字符与0x03(00000011)进行与(&)操作并左移4位,接着第二个字符右移4位与前者相或(|),即获得第二个目标字符。
再将第二个字符与0x0f(00001111)进行与(&)操作并左移2位,接着第三个字符右移6位与前者相或(|),获得第三个目标字符。
最后将第三个字符与0x3f(00111111)进行与(&)操作即获得第四个目标字符。
解码:
需留意为64的等号
相关方法:btoa atob 对单字节字符可以
2、hex
十六进制(简写为hex或下标16),一般用数字0到9和字母A到F(或a~f)表示,其中:A~F表示10~15,这些称作十六进制数字。
1字节可以表示成2个连续的16进制数字
相关方法:tostring(16) parseInt(0xff,16)
3、utf8
utf-8是一种针对Unicode的可变长度字符编码,utf-8用1到4个字节编码Unicode字符。
UTF-8编码规则:如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的字节数,其余各字节均以10开头
实际表示ASCII字符的UNICODE字符,将会编码成1个字节,并且UTF-8表示与ASCII字符表示是一样的。所有其他的UNICODE字符转化成UTF-8将需要至少2个字节。每个字节由一个换码序列开始。第一个字节由唯一的换码序列,由n位连续的1加一位0组成, 首字节连续的1的个数表示字符编码所需的字节数
Unicode转换为UTF-8时,可以将Unicode二进制从低位往高位取出二进制数字,每次取6位,如上述的二进制就可以分别取出为如下示例所示的格式,前面按格式填补,不足8位用0填补。
注:Unicode转换为UTF-8需要的字节数可以根据这个规则计算:如果Unicode小于0X80(Ascii字符),则转换后为1个字节。否则转换后的字节数为Unicode二进制位数+3再除以5。
4、utf16
UTF-16比起UTF-8,好处在于大部分字符都以固定长度的字节 (2字节) 储存,但UTF-16却无法兼容于ASCII编码。
5、byte[]
字节数组 一般存放ascll值 负值时可以加256变为正值
相关方法:charcodeat() String.fromCharCode