js字符串unicode转换方法整理

本文详细介绍了JavaScript中关于Unicode、UTF-8、UTF-16编码的处理,包括escape、unescape、encodeURI、decodeURI、encodeURIComponent、decodeURIComponent等函数的用法,以及TextEncoder和TextDecoder类在处理多字节字符时的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了能更好的理解以下函数,请先学习unicode,utf-8,utf-16的相关知识。这里推荐阮一峰老师的这篇文章

Unicode与JavaScript详解 - 阮一峰的网络日志 (ruanyifeng.com)

API详情请查看MDN

MDN Web Docs

// 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 '𠮷' 码位值转字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值