Кратко о Unicode и эмодзи

внешний интерфейс JavaScript Unicode

что такое юникод

Юникод — международная организация, которая может вместить весь мирвсеСхема кодирования символов для текста и символов, которая устанавливает единую и уникальную кодировку для каждого символа в каждом языке.

При представлении символа Unicode он обычно представляется как «U+», за которым следует набор шестнадцатеричных цифр. Например: U+4E25, U+1F600, U+1F601.

В чем разница между юникодом и UTF-8?

С точки зрения непрофессионала

  • Юникод — это «набор символов».
  • UTF-8 - это "правила кодирования"

набор символов: Назначьте уникальный идентификатор каждому «символу» (научное название — кодовая точка / кодовая точка / кодовая точка)
правила кодирования: Правила преобразования «кодовых точек» в последовательности байтов.

Как использовать Юникод в JS

кодирование:

1. Строковая форма
JavaScript позволяет использовать\uxxxxФорма представляет символ, где xxxx представляет кодовую точку Unicode символа. только для кодовых точек в\u0000~\uFFFFсимволы между ними. Символы вне этого диапазона должны быть представлены в виде двух двойных байтов.

"\u0061" // 'a'

// es6表示法(支持超过0xFFFF的数值)
"\u{1F601}"
  1. js-метод

es5: String.fromCharCode(Unicode)(ограничено кодовыми точками Unicode, не превышающими 0xFFFF)

String.fromCharCode(65) //return "A"

es6: String.fromCodePoint(Unicode)(поддерживает кодовые точки Unicode больше 0xFFFF)

String.fromCodePoint('0x1F601') // "😁"
String.fromCodePoint('128513') // "😁"

расшифровка

es5: str.charCodeAt()(ограничено кодовыми точками Unicode, не превышающими 0xFFFF)

var str = 'ABC'
str.charCodeAt(0) // 65

es6: str.codePointAt()(поддерживает кодовые точки Unicode больше 0xFFFF)

var str = "😁"
str.codePointAt(0) // 128513 10进制
str.codePointAt(0).toString(16) // "1f601" 16进制

кодировка эмодзи

эмодзи также является символом Unicode. В 2010 году Unicode начал присваивать эмодзи кодовые точки.
Например:U+1F4C5, U+1F468, U+1F600Ждать
Unicode определяет только кодовую точку и значение эмодзи, а не его стиль. Например, кодовая точка U+1F600 представляет собой улыбающееся лицо, но то, как выглядит это лицо, определяется каждой системой самостоятельно.

Если система пользователя не реализует этот символ эмодзи, пользователь увидит поле без содержимого, потому что система не может отобразить кодовую точку.

На данный момент существует 2789 символов эмодзи;
Ссылка на ссылку:emoji-text

комбинация смайликов

Unicode позволяет использовать несколько комбинаций кодовых точек для представления эмодзи. пройти черезСоединитель нулевой ширины U+200Dвыполнить.

U+1F468:男人
U+1F469:女人
U+1F467:女孩
比如U+1F468 U+200D U+1F469 U+200D U+1F467,就会显示为一个 Emoji 👨‍👩‍👧
如果用户的系统不支持这种方法,就还是显示为三个独立的 Emoji 👨👩👧

Столяр нулевой ширины (ZWJ) — это непечатаемый символ, помещаемый между двумя символами в некоторых языках, требующих сложного набора (например, арабский, хинди). Дефис нулевой ширины создает эффект переноса для двух символов, которые в противном случае не переносились бы. Кодовая точка Unicode для дефиса нулевой шириныU+200D

// 多码点转成emoji组合
function unifiedToNative(unified) {
  var unicodes = unified.split('-'),
      codePoints = unicodes.map((u) => `0x${u}`)

  return String.fromCodePoint(...codePoints)
}

// 多组合emoji 转成码点
var s = '👩‍❤️‍👩';
for (let ch of s) {
  console.log(ch.codePointAt(0).toString(16)); // 1f469 200d 2764 fe0f 200d 1f469
}

Спасибо за прочтение.

Этоличное эссеадрес, если нравится, поставь звездочку^_^

Использованная литература: