为了能更好的理解以下函数,请先学习unicode,utf-8,utf-16的相关知识。这里推荐阮一峰老师的这篇文章
Unicode与JavaScript详解 - 阮一峰的网络日志 (ruanyifeng.com)
API详情请查看MDN
// eg.春 Unicode 码位值(即,在unicode中的编号)26149 utf-16 0x6625(=26149) utf-8编码0xE6(=230) 0x98(=152) 0xA5(=163)
escape('春');
// 已弃用 return '%u6625'
// 不对ASCII字母、数字、标点符号"@ * _ + - . /"生效
// 值小于等于 0xFF 时,用一个 2 位转义序列:%xx 表示。大于的话则使用 4 位序列:%uxxxx 表示
unescape('%u6625'); // 已弃用,return '春'
encodeURI('春');
// return '%E6%98%A5' utf-8编码,%xx 的形式显示每个字节
// 保留字符,非转义字符,数字符号不转义(详见MDN)
decodeURI('%E6%98%A5'); // return '春'
encodeURIComponent('春='); // return '%E6%98%A5%3D'
// 按utf-8编码,%xx 的形式显示每个字节,对URL的部分组成部分编码
// 仅不转义如下A-Z a-z 0-9 - _ . ! ~ * ' ( )
decodeURIComponent('%E6%98%A5%3D'); // return '春='
(new TextEncoder()).encode('春'); // return Uint8Array[230, 152, 165] 返回utf-8,每个字节按10进制显示
(new TextDecoder()).decode(new Uint8Array([230, 152, 165])) // return '春'
// 双字节码点 \u0000~\uFFFF
'春'.charAt(); // return '春'
'春'.charCodeAt(); // return 26149 码位值
'春'.codePointAt(); // return 26149 码位值
'\u6625' // return '春' UTF-16转字符串
String.fromCodePoint(26149) // return '春' 码位值转字符串
// 四字节码点
'\uD842\uDFB7' // return '𠮷' UTF-16转字符串
'\u{20BB7}' // return '𠮷' 码位值的16进制转字符串
'𠮷'.length // return 2
Array.from('𠮷').length // return 1
'𠮷'.split(''); // return ['\uD842', '\uDFB7']
'𠮷'.charAt(); // return '\uD842' 返回第一个字节的utf-16
'𠮷'.charCodeAt(); // return 55362 返回第一个字节10进制, 0xD842===55362
'𠮷'.codePointAt(); // return 134071 码位值,可以自动识别四字节码点
String.fromCodePoint(134071) // return '𠮷' 码位值转字符串