JavaScript字符串以UTF-16存储,BMP字符占2字节,扩展字符用代理对占4字节;需用Array.from获取真实字符数,如'????'.length为8但实际为1个字符。

JavaScript 中的字符串操作经常涉及 Unicode 和编码转换,尤其是在处理多语言文本、特殊符号或网络传输时。理解这些机制能帮助开发者避免乱码、解析错误等问题。下面介绍几个关键点和实用技巧。
JavaScript 字符串以 UTF-16 编码存储,每个字符通常占用 2 个字节(16 位)。对于基本多文种平面(BMP)中的字符(U+0000 到 U+FFFF),可以直接表示。超出此范围的字符(如一些 emoji 或罕见汉字)使用代理对(surrogate pair)表示,占 4 个字节。
你可以用 \u 表示 Unicode 字符:
\u0041 // 输出 'A'要安全获取字符串中真实字符数量(包括 emoji 等),应使用 Array.from() 或展开语法:
立即学习“Java免费学习笔记(深入)”;
Array.from('????').length // 返回 1(正确)浏览器环境提供了 TextEncoder 和 TextDecoder 来处理 UTF-8 编码转换:
const encoder = new TextEncoder();在网络传输或存储中,常需将二进制数据转为 Base64。虽然浏览器原生支持 btoa 和 atob,但它们只支持单字节字符(ASCII),不能直接处理 Unicode 字符串。
正确做法是先转为 UTF-8 字节流再编码:
function unicodeToBase64(str) {某些字符(如 ?、?)由两个代理字符组成。若未正确处理,可能导致截断错误或显示异常。
判断一个字符是否为代理对的一部分:
function isSurrogatePair(charCode) {遍历字符串时推荐使用 for...of,它会自动识别代理对和组合字符:
for (const ch of 'Hello ?') {基本上就这些。掌握 Unicode 特性能让字符串操作更稳健,尤其在国际化项目中尤为重要。不复杂但容易忽略细节。
以上就是JavaScript字符串操作_Unicode与编码转换技巧的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号