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

如何将HTML十六进制实体转换为UTF-16双字节十六进制?React Native JS实现

如何把HTML十六进制实体转成UTF-16双字节十六进制格式?

首先得明确两者的对应关系:HTML十六进制实体本质是Unicode码点的一种表示,而UTF-16是Unicode的一种编码方式,具体转换步骤如下:

  • 提取核心十六进制值:比如从😍里抠出1F60D(去掉前缀&#x和末尾的;)。
  • 转成十进制Unicode码点:用parseInt('1F60D', 16)得到十进制值128525。
  • 分情况生成UTF-16双字节十六进制:
    • 如果码点在U+0000到U+FFFF之间(比如©对应版权符号©),直接把码点转成4位十六进制字符串即可,比如00A9。
    • 如果码点超过U+FFFF(像表情符号这类),需要拆成UTF-16代理对:
      1. 计算偏移量:码点 - 0x10000,这里就是0x1F60D - 0x10000 = 0xF60D。
      2. 生成高代理字符:0xD800 + (偏移量 >> 10),计算得0xD83D。
      3. 生成低代理字符:0xDC00 + (偏移量 & 0x3FF),计算得0xDE0D。
      4. 最终的UTF-16双字节十六进制就是D83D DE0D。
React Native中把😍转成对应表情😍的方法

React Native没有浏览器的DOM环境,没法直接用DOMParser这类API,推荐两种实用的纯JS方案:

方案一:手动正则解码(轻量无依赖)

写个简单的正则匹配HTML十六进制实体,再用String.fromCodePoint生成对应字符——这个方法能直接处理超过U+FFFF的码点,不用手动拆分代理对:

function decodeHexHtmlEntity(str) {
  // 匹配&#x开头、分号结尾的十六进制实体格式
  return str.replace(/&#x([0-9A-Fa-f]+);/g, (_, hexStr) => {
    const codePoint = parseInt(hexStr, 16);
    return String.fromCodePoint(codePoint);
  });
}

// 测试示例
const htmlEntity = '😍';
const emoji = decodeHexHtmlEntity(htmlEntity);
console.log(emoji); // 输出 😍

方案二:用第三方库(适合复杂场景)

如果需要处理多种HTML实体(比如十进制实体😍、命名实体⌣),可以用html-entities这个轻量库:
首先安装依赖:

npm install html-entities --save

然后在代码中调用解码方法:

import { decode } from 'html-entities';

const htmlEntity = '😍';
const emoji = decode(htmlEntity);
console.log(emoji); // 输出 😍

这个库会自动处理各种实体格式,省心又高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:23:52