如何将unicode字符转换成相应的表情符号?

How to convert unicode characters into corresponding emojis?

我正在对我的数据执行类似 website 的操作。我有以下格式的 Unicode,将 UTF16 转换为 UTF 字符串的代码有效。

function decodeFBEmoji (fbString) {
  // Convert String to Array of hex codes
  const codeArray = (
    fbString  // starts as '\u00f0\u009f\u0098\u00a2'
    .split('')
    .map(char => (
      char.charCodeAt(0)  // convert '\u00f0' to 0xf0
    )
  );  // result is [0xf0, 0x9f, 0x98, 0xa2]

  // Convert plain JavaScript array to Uint8Array
  const byteArray = Uint8Array.from(codeArray);

  // Decode byte array as a UTF-8 string
  return new TextDecoder('utf-8').decode(byteArray);  // ''

我正在尝试从文本字符串中提取 Unicode,然后用其解码的 Unicode 替换它以显示为正确的表情符号。我尝试使用正则表达式提取 Unicode 字符串,但是,它转换为随机垃圾字符,并且正则表达式结果为空。 如何在不更改其余文本的情况下用表情符号替换给定的代码?

function replaceEmoji(text){
      let str = "lorem ipsum lorem ipsum \u00e2\u009d\u00a4\u00ef\u00b8\u008f lorem ipsum"; 
      let res = str.match(/[\]\w+/g); 
      console.log(str);
      console.log(res); //Result is null
}

Console output of the above code

编辑:Regex Pattern I tested

您正在尝试解码一些 UTF8,但您混淆了 JS 字符串转义和字节。

当您键入 \uXXXX 时,您键入的是 unicode 代码点的转义符(就像 \n 是换行符的转义符一样),例如:"\u0041" == "A"

这就是您的正则表达式无法匹配任何内容的原因,字符串中实际上没有反斜杠 \。现在不清楚你的 UTF8 是以什么形式传入的,但如果它像你写的那样,它是一系列需要像这样解码的 UTF8 字节:

const utf8 = new Uint8Array(Array.prototype.map.call("lorem ipsum lorem ipsum \u00e2\u009d\u00a4\u00ef\u00b8\u008f lorem ipsum", c => c.charCodeAt(0)));
console.log(new TextDecoder('utf8').decode(utf8));