You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中组合emoji😶‍🌫️的完整Unicode编码获取问题

如何在JavaScript中获取组合Emoji的完整Unicode编码?

你遇到的问题核心是:😶‍🌫️是多码点组合的Emoji序列,由四个独立Unicode码点拼接而成,codePointAt(0)只能提取第一个基础字符的码点(U+1F636),必须遍历整个字符串的所有码点才能拿到完整编码。

解决方案1:用Array.from()拆分码点

Array.from()会自动处理UTF-16代理对,将字符串拆分为对应的Unicode码点单元,再逐个提取编码:

const emoji = '😶‍🌫️';
const fullCode = Array.from(emoji)
  .map(char => `U+${char.codePointAt(0).toString(16).toUpperCase()}`)
  .join('');

console.log(fullCode); // 输出:U+1F636U+200DU+1F32BU+FE0F

解决方案2:手动遍历索引处理代理对

如果需要更底层的控制,可以通过循环遍历字符串索引,判断当前字符是否属于代理对(存储大于0xFFFF的码点),调整索引步长逐个提取码点:

const emoji = '😶‍🌫️';
const codePoints = [];

for (let i = 0; i < emoji.length; ) {
  const cp = emoji.codePointAt(i);
  codePoints.push(`U+${cp.toString(16).toUpperCase()}`);
  // 大于0xFFFF的码点占2个UTF-16字符,索引+2;否则+1
  i += cp > 0xFFFF ? 2 : 1;
}

console.log(codePoints.join('')); // 输出:U+1F636U+200DU+1F32BU+FE0F

关键说明

组合Emoji(带修饰、连接符的Emoji)本质是多个Unicode码点的序列,常见组成部分包括:

  • 基础Emoji字符(如😶)
  • 零宽连接符U+200D(用于连接多个Emoji组件)
  • 变体选择符U+FE0F(指定Emoji样式而非文本样式)

要获取完整编码,必须提取序列中的每一个码点,而非仅第一个。

内容的提问来源于stack exchange,提问作者Shire

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 03:08:12