字符字节以及编解码之间的关系
xuqinggang opened this issue · 0 comments
xuqinggang commented
字符串编解码
-
字符串,有多种编码方式(常见的utf8、base64、hex等等)
-
字符串编解码转换:
-
编码: 一般是指以utf8编码的字符串,以指定编码方式编码为指定编码字符串
-
解码: 将编码后的字符串,以指定的编码方式解码为utf8字符串
举例:
// 字符串base64编解码 module.exports = { encode: function(str) { // Buffer.from 默认的encoding为utf8 将utf8编码的字符串转换为base64编码的字符串 return Buffer.from(str).toString('base64'); }, decode: function(str) { // 将base64编码的字符串,转换为utf8编码字符串 toString默认参数为utf8(toString('utf8')) return Buffer.from(str, 'base64').toString(); } };
- 统计不同编码方式字符串的字节
- utf8:
- 占2个字节的:带有附加符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及它拿字母则需要二个字节编码;
- 占3个字节的:基本等同于GBK,含21000多个汉字;
- 占4个字节的:中日韩超大字符集里面的汉字,有5万多个;
- 一个utf8数字占1个字节;一个utf8英文字母占1个字节;少数是汉字每个占3个字节,多数占用4个字节。
- base64: 见参考文献Base64笔记
- 举例:
const dong = '您好,世界!'; > dong.length; // 6(utf8字符数) > Buffer.byteLength(dong,'utf8'); // 18 (一个utf8中文字符=三个字节)(里面的标点符号为中文下的) > Buffer.byteLength(Buffer.from(dong).toString('utf16le'),'utf16le'); // 18 > Buffer.byteLength(Buffer.from(dong).toString('base64'),'base64'); // 18 > Buffer.byteLength(Buffer.from(dong).toString('hex'),'hex'); // 18
参考文献: