编程语言
首页 > 编程语言> > 将表情符号代码指向JavaScript中的字符串

将表情符号代码指向JavaScript中的字符串

作者:互联网

我正在尝试从the GitHub API加载emojis并将代码点转换为JavaScript中的字符串.这适用于由单个代码点组成的表情符号,但由多个点组成的表情符号无效,例如family_woman_woman_girl_girl.我正在使用zero width joiner (zwj)连接字符.

const list = document.getElementById('emojis');
const zwj = '\u200D';

async function renderList() {
  // load the github emojis: https://developer.github.com/v3/emojis/
  const response = await fetch('https://api.github.com/emojis');
  const data = await response.json();
  
  // render a list item for each emoji
  for (const [key, value] of Object.entries(data)) {
    // skip GitHub's custom emoji
    if (!/\/unicode\//.test(value)) {
      continue;
    }
    
    // parse the url into an array of code points
    const codePoints = value
      .substr(57)
      .replace(/\.png\?.*$/, '')
      .split('-')
      .map(hex => parseInt(hex, 16));
    
    // translate the code points to a string. SOMETHING WRONG HERE
    const emoji = codePoints
      .map(p => String.fromCodePoint(p))
      .join(zwj);
    
    // render the list item
    const li = document.createElement('li');
    li.textContent = `${key}: ${codePoints} ${emoji}`;
    list.appendChild(li);
  }
}

renderList();
<ul id="emojis"></ul>

解决方法:

并非所有的表情符号序列都与ZWJ粘在一起.最值得注意的是,人们和他们的肤色简单地组合在一起而没有任何填充物

Unicode维护a list of all code points/combinations它认为是表情符号. emoji-data.txt文件都是single-cp emojis. emoji-zwj-sequences.txt是具有至少一个ZWJ和表情符号序列的所有序列.其余的是.

请注意,并非emoji-zwj-sequences.txt中的所有cps都与ZWJ粘合在一起,例如,此行:

1F469 1F3FD 200D 1F4BB                      ; Emoji_ZWJ_Sequence  ; woman technologist: medium skin tone                           #  8.0  [1] (

标签:javascript,github,github-api,emoji
来源: https://codeday.me/bug/20190710/1425811.html