汉字转base64的过程
在UTF8编码中一个字符占用一个字节 一个汉字占用3个字节。
11111111 11111111 11111111
Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0填充,输出字符使用'=',因此编码后输出的文本末尾可能会出现1或2个'='。
为了保证所输出的编码位可读字符,Base64制定了一个编码表,以便进行统一转换。编码表的大小为2^6=64,这也是Base64名称的由来。
通过本工具可以对代码进行Base64加密或者解密。Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一。
把一个汉字转化成base64编码的过程:
1.把汉字转化成16进制
2.把16进制转化成2进制
3.把38=24位的二进制变成 46的二进制
4.把2进制转化成10进制
5.根据Base64编码表转化成base64编码
let buffer = Buffer.from('冯'); //将字符串转化成16进制
console.log(buffer); //e5 86 af
// 把16进制转化成2进制
console.log((0xe5).toString(2));
console.log((0x86).toString(2));
console.log((0xaf).toString(2));
// 11100101 10000110 10101111 这个是3*8的模式 我们把这个模式转化成4*6的模式
// 111001 011000 011010 101111 4*6模式 且最大不会超过64
// 把二进制变成10进制
console.log(parseInt('111001', 2));
console.log(parseInt('011000', 2));
console.log(parseInt('011010', 2));
console.log(parseInt('101111', 2));
// 57 24 26 47
// Base64编码表
let str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
str += str.toLowerCase();
str += '0123456789';
str += '+/';
console.log(str[57]+str[24]+str[26]+str[47]); //5Yav
/**
* 5Yav就是汉字冯的base64编码,不具有加密性,但是我们可以看到原来的汉字是3字节现在5Yav变成了4个字节 所以base64适合小图标转码
*/
总结:
1.base64 没有加密功能,它只是编码转化base64 。
2.base64适合小图标转码