Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CodeFest 2019. Тимофей Чаптыков (ВКонтакте) — П...

CodeFest
April 07, 2019

CodeFest 2019. Тимофей Чаптыков (ВКонтакте) — Пара слов об эмоджи

Всё ли так просто с эмоджи? Разберемся, что такое эмоджи, сколько их, какие они бывают, как добавляются новые эмоджи в стандарт, как их найти в тексте, и хорошая ли идея заменять эмоджи на собственные картинки.

CodeFest

April 07, 2019
Tweet

More Decks by CodeFest

Other Decks in Technology

Transcript

  1. Рефакторинг эмоджи в VK — Поддержка всех эмоджи — исправление

    старых ошибок — Замена эмоджи в тексте на изображения — Сборка, спрайты, оптимизация, нейминг
  2. КОИ-8 код обмена информацией, 8 бит Восьмибитовая кодировка для кириллических

    алфавитов, совместимая с ASCII. Использовалась, как основная русская кодировка в Unix-совместимых ОС.
  3. 11110000 11010010 11001001 11010111 11000101 11010100 00100000 11001110 11000101 11010010

    11000100 11000001 11001101 F0 D2 C9 D7 C5 D4 20 CE C5 D2 C4 C1 CD Привет нердам
  4. F0 D2 C9 D7 C5 D4 20 CE C5 D2

    C4 C1 CD 11110000 11010010 11001001 11010111 11000101 11010100 00100000 11001110 11000101 11010010 11000100 11000001 11001101 0 0 0 0 0 0 0 0 0 0 0 0 0
  5. F0 D2 C9 D7 C5 D4 20 CE C5 D2

    C4 C1 CD pRIWET NERDAM 11110000 11010010 11001001 11010111 11000101 11010100 00100000 11001110 11000101 11010010 11000100 11000001 11001101 0 0 0 0 0 0 0 0 0 0 0 0 0
  6. F0 D2 C9 D7 C5 D4 20 CE C5 D2

    C4 C1 CD pRIWET NERDAM 11110000 11010010 11001001 11010111 11000101 11010100 00100000 11001110 11000101 11010010 11000100 11000001 11001101 0 0 0 0 0 0 0 0 0 0 0 0 0 (◕‿◕)ὑ
  7. Теперь мы можем верстать так, как завещал А. Лебедев в

    § 62 своего „Ководства“», — пронеслось в моей голове… «
  8. Разобрать на байткод encodeURIComponent(''); 
 // "%F0%9F%92%8B" 
 
 encodeURIComponent(';');

    
 // "*%EF%B8%8F%E2%83%A3" 
 
 Цифры и * — безопасные символы 
 для URI и не заменяются
  9. Специфика — PHP, JS
 поддержка регулярных выражений на JS и

    PCRE — CP-1251 в исходниках и данных на сервере — Производительность — Толерантность к отступлениям от стандарта и отсутствие ложных срабатываний
  10. JavaScript RegExp & Unicode /\u{1F600}/u.test(''); // true 
 
 /\uD83D\uDE00/u.test('');

    // true 
 Не забываем про флаг /u 
 для регулярок с Юникодом
  11. Выводы — «Ну, не надо было конвертировать куда попало» —

    «Регулярка не для этого была предназначена»
  12. Толерантность и U+FE0F Текстовая версия github.com/mathiasbynens/emoji-regex/blob/master/text.js — Некоторые Emoji используются

    без U+FE0F и поддерживаются операционными системами — Если мы игнорируем U+FE0F, то получим неприятные ложные срабатывания
  13. Алгоритм — Разобрать на UTF-16 символы — Найти описание UTF-16

    символов — Разобрать на Unicode-символы — Найти описание Unicode-символов
  14. Разобрать на UTF-16 слова ''.split('').map((s) => { 
 return s.charCodeAt(0).toString(16);

    
 }); // ["d83d", "dd25"] Суррогатная пара, указывающая 
 на символ 0x1f525
  15. Разобрать на Unicode-символы Array.from('U').map((s) => { 
 return s.codePointAt(0).toString(16); 


    }); 
 // ["1f4aa", "1f3fb"] 
 
 Эмоджи «flexed bicep» 
 со светлым цветом кожи
  16. U

  17. Unicode Technical Standard: Unicode Emoji unicode.org/reports/tr51 Презентация об эмоджи unicode.org/emoji/slides.html

    История эмоджи medium.com/@k4i/japanese-emoji-1-bf150c2825d1 VK Tech vk.com/tech