Emoji символы

Одна из новостей сегодняшних трендов твиттера - вконтактик добавил отображение эмоциональных значков для пользователей мобильной версии. Отмечу, что топ умеет их отображать достаточно давно для любого браузера, а не пустые квадратики, как это сделано в твиттере. Проблема этих значков в том, что 1) их много 2) они представляют из себя UTF-32 символы, в то время как большинство браузеров работает в UTF-8, а сама MSVS хоть и называет кодировку utf-8, всеравно все строки обрабатывает как UTF-16. А вот телефон, типа iphone обрабатывает все как utf-32 , поэтому у него много возможностей по добавлению дополнительных символов.

Итого, чтобы на своем сайте отобразить emoji символы достаточно 1) сделать ссылку на CSS - http://cdn.t30p.ru/t30p.ru/emoji.css , 2) При разботе строчки текста в utf-16 побайтово определять верхние и нижние суррогатные символы, из 2х таких utf-16 байтов как раз и формируется utf-32 emoji символ. 3) Получить шестизначный код utf-32 символа из двух utf-16 байтов, для этого нам помогает функция Char.ConvertToUtf32. Итак, ниже пример функции, которая находит и заменяет в строчке суррогаты на нужные SPAN.
Copy Source | Copy HTML
  1. public static string DetectSurrogates(string text)
  2.     {
  3.         StringBuilder sbOutput = new StringBuilder();
  4.         char ch;
  5.         for (int i =  0; i < text.Length; i++)
  6.         {
  7.             ch = text[i];
  8.             if ((ch >= 0x0020 && ch <= 0xD7FF) ||
  9.                 (ch >= 0xE000 && ch <= 0xFFFD) ||
  10.                 ch == 0x0009 ||
  11.                 ch == 0x000A ||
  12.                 ch == 0x000D)
  13.             {
  14.                 sbOutput.Append(ch);
  15.             }
  16.             else
  17.             {
  18.                 sbOutput.Append(String.Format("<span class=\"emoji emoji{0:x}\"></span>", Char.ConvertToUtf32(ch, text[i + 1])));
  19.                 i++;//пропускаем 1 байт
  20.             }
  21.         }
  22.         return sbOutput.ToString();
  23.     }


Метки:   Категории:Code


blog comments powered by Disqus

Добавить комментарий

Кто я?

Программист. Я слежу за блогосферой и знаю, как будет развиваться интернет. Когда у меня есть время я даже прилагаю для этого усилия. Подробнее

Последние комментарии

Topbot at FeedsBurner

Популярные записи

Облако тэгов

Не отображать

Мои Твиты

Twitter февраля 12, 09:04
Роскомнадзор достучался до Azure http://dlvr.it/QyjSPS

Twitter февраля 6, 07:58
Про жизнь в Южной Осетии http://dlvr.it/QyHTwx

Twitter февраля 6, 07:58
Хиллари против Трампа в Америке и приход женщин во власть http://dlvr.it/QyHTxG https://twitter.com/f1ashr/status/1093056334906281985/photo/1

Twitter февраля 6, 07:58
Powering Down Google Reader http://dlvr.it/QyHTvM

Twitter февраля 4, 22:48
Разбор сериала Медичи: Повелители Флоренции http://dlvr.it/QyBKWh https://twitter.com/f1ashr/status/1092555544953466880/photo/1

Twitter февраля 4, 22:48
Добродел обновился http://dlvr.it/QyBKWM https://twitter.com/f1ashr/status/1092555541505748992/photo/1

Twitter февраля 4, 22:48
Минусы Windows Azure и проблемы облачных технологий http://dlvr.it/QyBKTx https://twitter.com/f1ashr/status/1092555537604984832/photo/1

Twitter февраля 2, 19:43
Трансляции Одноклассников (http://Ok.ru/live) добавлены в t30p http://dlvr.it/Qy3PD5 https://twitter.com/f1ashr/status/1091784208618405890/photo/1

Twitter февраля 2, 19:43
Upside down, Inside Out, Zero Gravity http://dlvr.it/Qy3PCF https://twitter.com/f1ashr/status/1091784204344385538/photo/1

Twitter февраля 2, 19:43
Европейский Гугл удаляет ваш сайт из результатов поиска http://dlvr.it/Qy3P8H

Twitter января 29, 09:55
@TheFranchiseCo7 @coinhive_com Forget about them, they dont process payments for 3 months already

Twitter января 18, 21:16
PUBG Mobile выпустила эмулятор Android http://dlvr.it/Qx0CYl https://twitter.com/f1ashr/status/1086371676554588160/photo/1

Twitter января 16, 12:09
Белый шум защищен авторским правом на youtube http://dlvr.it/Qwnrln

Twitter января 16, 09:09
Пример божественного вмешательства в фильме No country for old men http://dlvr.it/QwnGRH https://twitter.com/f1ashr/status/1085464059191865345/photo/1

Twitter января 16, 09:09
Украина готовит на Евровидение песню с быками http://dlvr.it/QwnGTW

Twitter января 9, 20:08
Рейтинг каналов Discord App http://dlvr.it/QwKXrr https://twitter.com/f1ashr/status/1083093077856727040/photo/1

Twitter января 8, 20:03
Про рейтинг http://dlvr.it/QwFNxN

Twitter января 8, 20:03
http://asp.net optimization http://dlvr.it/QwFNw9

Twitter января 8, 20:03
Закрытие Европы http://dlvr.it/QwFNx0

Twitter января 7, 13:03
Новогодние поздравления от Google http://dlvr.it/Qw7nXS https://twitter.com/f1ashr/status/1082261513778262018/photo/1

Мой твиттер

Копирайт

Все мысли, высказанные в блоге, являются моим мнением и за это мнение меня никто не забанит! Кроме того, никто не имеет право копировать материалы блога без использования ctrl+C/V!

© Copyright 2008