新闻中心
JS字符串编码_Unicode处理技巧
J*aScript字符串基于UTF-16编码,BMP字符占2字节,非BMP如emoji需代理对占4字节;'?'.length为2但实际是1个字符,应使用Array.from('?').length或扩展运算符获取正确长度;访问字符时charAt可能截断代理对导致乱码,推荐用String.prototype.at()或codePointAt判断;正则需加u标志支持Unicode,如/^.$/u.test('?')返回true,\p{Emoji}可匹配emoji。

J*aScript 中的字符串基于 UTF-16 编码,这使得处理 Unicode 字符时容易出现一些意料之外的问题。掌握正确的 Unicode 处理技巧,能有效避免字符截断、长度误判等问题。
理解 Unicode 与 UTF-16 编码
Unicode 是为全球字符设计的统一编码标准,每个字符对应一个码点(Code Point),例如 U+1F600 表示“?”。但 JS 字符串使用 UTF-16 编码存储,这意味着:
- 基本多文种平面(BMP)字符(U+0000 到 U+FFFF)占 2 个字节,用一个 16 位单元表示
- 超出 BMP 的字符(如 emoji、部分汉字)需用代理对(Surrogate Pair)表示,占 4 个字节,即两个 16 位单元
例如,“?” 的码点是 U+20BB7,在 JS 中会被表示为两个 \u{20BB7} 才能正确解析。
正确获取字符串长度
直接使用 string.length 可能返回错误结果,因为代理对会被算作两个字符。
错误示例:'?'.length 返回 2,但实际上它是一个字符。
使用 ES6 的 Array.from() 或扩展运算符:
151
查看详情
-
Array.from('?').length→ 1 -
[...'?'].length→ 1
或者使用 String.prototype.codePointAt() 遍历码点来计数。
安全地访问和截取字符
使用 charAt() 或索引访问可能只拿到代理对的一半,导致乱码。
-
'?'.charAt(0)返回空字符或乱码
推荐使用 String.prototype.at()(现代浏览器支持)或结合 codePointAt 手动判断:
安全截取函数示例:function getChar(str, index) { const code = str.codePointAt(index); if (code >= 0x10000) return str.slice(index, index + 2); return str[index]; }
正则表达式中的 Unicode 支持
默认正则不识别代理对或 Unicode 属性。使用 u 标志启用完整 Unicode 支持。
-
/^.$/u.test('?')→ true(匹配单个码点) -
/\p{Emoji}/u可匹配 emoji(需配合属性)
利用 \p{} 和 Polyfill 可实现更复杂的 Unicode 字符分类匹配。
基本上就这些常见场景。只要注意码点与编码单元的区别,使用现代 API 处理,就能避免大多数 Unicode 陷阱。以上就是JS字符串编码_Unicode处理技巧的详细内容,更多请关注其它相关文章!
# 如何处理
# 利用seo创业
# 美食关键词排名查询
# 重庆网站seo推广
# 白银银川网站推广
# 推广营销的类型包括哪些
# 品创天下网站优化案例3
# 医院网络推广营销方案
# seo制作ip
# aso和seo优化区别
# 信息流推广获客全网营销
# 它是
# 推荐使用
# 遍历
# 就能
# javascript
# 类库
# 运算符
# 如何实现
# 转化为
# gate
# 区别
# ai
# 字节
# 浏览器
# 编码
# 正则表达式
# js
# java
# es6
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
在命令行怎么运行html项目_命令行运行html项目方法【教程】
sublime如何配置Python开发环境_将sublime打造成轻量级Python IDE
厨房不锈钢水槽发黑生锈怎么处理_水槽用可乐+锡纸2分钟抛亮如新
三星GalaxyZFold5怎样在相册制作折叠屏分镜_iPhone三星GalaxyZFold5相册制作折叠屏分镜【创意编辑】
如何在网页中实现特定地点的随机图片展示
腾讯QQ邮箱登录入口_QQ邮箱官方网站使用地址
word中如何让数字纵向排列_Word数字纵向排列方法
ArrayList与LinkedList核心操作的Big-O复杂度分析
PowerPoint如何制作滚动字幕结尾彩蛋_PowerPoint路径动画实现平滑滚动字幕效果
在Socket.IO连接中实现Access Token自动更新与动态重连
sublime如何配置Go语言开发环境_sublime搭建Golang编译运行系统
Yandex搜索引擎官方地址 俄罗斯网络世界的主要入口
AO3官方在线访问地址 Archive of Our Own最新镜像合集
163邮箱登录密码 163邮箱忘记密码找回
HTML空白字符处理机制:渲染、DOM与编码实践
2026春节假期时间安排 2026春节假日查询
b站怎么删除评论_b站评论管理与删除操作
PHP中获取MongoDB服务器运行时间(Uptime)的专业指南
可靠CSGO开箱平台解析 CSGO开箱网合集
Angular中父组件异步更新子组件复选框状态的实践指南
晋江读书网页版在线登录 晋江读书电脑版官网
QQ邮箱网页版快速登录 QQ邮箱邮箱账号官方入口地址
小红书商家版怎样在笔记嵌入商品卡路径_小红书商家版在笔记嵌入商品卡路径【挂载教程】
虚幻5科幻题材ARPG大作遭取消!本是《奇异人生》厂商新作
Win10怎么制作U盘启动盘 Win10系统安装U盘制作教程【详解】
如何高效处理PHP中的Excel数据导入导出?PortPHP/Spreadsheet助你轻松搞定!
邮政编码查询不到怎么办_邮政编码查询不到的常见原因与对策
树莓派传感器触发:通过Twilio API发送WhatsApp消息教程
PHP中SSG-WSG API的AES加密实践:正确使用初始化向量
深入理解字体排版:Adobe光学字偶距与CSS字偶距的差异与实现
Yandex官网搜索引擎免登录_俄罗斯Yandex一键直达入口
动漫花园资源网使用步骤_动漫花园资源网下载流程
大麦的“候补”是什么意思 大麦候补购票规则【详解】
必由学官网首页入口 必由学教师网页版登录指南
Win11怎么开启卓越性能模式 Win11电源选项启用高性能释放硬件潜力【方法】
CSS布局中意外空白:解决padding-top导致的顶部间距问题
vivo浏览器怎么扫描二维码 vivo浏览器内置扫一扫功能使用方法
J*aScript井字棋(Tic-Tac-Toe)核心交互逻辑实现教程
yandex入口引擎手机版 yandex安卓版下载入口
VS Code远程开发时如何处理文件权限问题
Python字典中优雅地迭代剩余元素的方法
PHP 枚举:根据字符串获取枚举案例的策略与实现
Excel如何用迷你图显趋势_Excel用迷你图显趋势【趋势小图】
在J*a中如何使用BigDecimal进行高精度计算_BigDecimal类应用指南
谷歌浏览器如何快速清除某个网站的数据_Chrome网站缓存清理方法
UC浏览器如何安装插件 UC浏览器添加扩展程序详细教程【进阶】
外媒分析《GTA6》定价:卖100美元可以但真没必要!
mc.js免安装版 mc.js一键畅玩入口
魅族17怎样用浏览器译外语网页_iPhone魅族17浏览器译外语网页【即时翻译】
使用Python高效删除Word宏并转换DOCM为DOCX格式


2025-11-19
浏览次数:次
返回列表