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 декабря 11, 17:52
Мировой крах в 2014 году глазами кино-зомби http://dlvr.it/QtNQt8 https://twitter.com/f1ashr/status/1072549750463967232/photo/1

Twitter декабря 11, 17:50
Гениальное приложение http://dlvr.it/QtNQsS

Twitter декабря 11, 17:50
Нанотехнологии,Юмор,Осколлково,СТС,видео http://dlvr.it/QtNQrB

Twitter декабря 7, 13:11
Механический медведь для Америки - Погружение во Тьму http://dlvr.it/Qt3hCf https://twitter.com/f1ashr/status/1071029327888736256/photo/1

Twitter декабря 6, 07:49
@coinhive_com Are you paying or not? Are you stopping your service?

Twitter декабря 1, 15:49
Международная система единиц СИ http://dlvr.it/QsZWxP https://twitter.com/f1ashr/status/1068894908939784192/photo/1

Twitter ноября 30, 15:47
Пользователи умудрились поломать гео-локацию в Инстаграм http://dlvr.it/QsVQn0

Twitter ноября 30, 15:47
Популярные блогеры и посты за 2017 год http://dlvr.it/QsVQmn https://twitter.com/f1ashr/status/1068532024984498176/photo/1

Twitter ноября 30, 15:47
Разбор сериала Медичи: Повелители Флоренции http://dlvr.it/QsVQmf https://twitter.com/f1ashr/status/1068532019930353664/photo/1

Twitter ноября 29, 15:45
Обновлен робот instagram для лайков http://dlvr.it/QsPrh2

Twitter ноября 29, 15:45
Skype and Baidu links http://dlvr.it/QsPrht

Twitter ноября 29, 15:45
О смене дизайна Вконтакте http://dlvr.it/QsPrgT

Twitter ноября 23, 13:18
Статистика просмотров Телеграма http://dlvr.it/Qrwybs

Twitter ноября 20, 11:54
По-тихому закрылся http://taaasty.com http://dlvr.it/QrgcJf

Twitter ноября 15, 21:21
Разное - сетевое http://dlvr.it/QrLfbH

Twitter ноября 12, 08:54
@lopp @coinhive_com Beware, that coinhive doesnt process payouts for last month and no reply from them.

Twitter ноября 6, 08:26
@MultiFollow_com @coinhive_com The same, cant get payment since Oct 29

Twitter октября 29, 18:13
Вконтакте закрыла гео-поиск http://dlvr.it/QptcDZ

Twitter октября 29, 17:48
RT @t30p: Моя Борьба (Mein Kampf) - Мыслить №112 https://youtu.be/eq3r3n3jAkY с помощью @YouTube

Twitter октября 23, 17:57
8-й час в России http://dlvr.it/QpG99N https://twitter.com/f1ashr/status/1054793845546790912/photo/1

Мой твиттер

Копирайт

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

© Copyright 2008