如何将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代理对:- 计算偏移量:
码点 - 0x10000,这里就是0x1F60D - 0x10000 = 0xF60D。 - 生成高代理字符:
0xD800 + (偏移量 >> 10),计算得0xD83D。 - 生成低代理字符:
0xDC00 + (偏移量 & 0x3FF),计算得0xDE0D。 - 最终的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
相关产品推荐
相关产品推荐

