Юникодные часы

В Юникоде есть несколько символов часов (не знаю, отобразятся ли они у вас, вот они): «🕐🕜🕑🕝🕒🕞🕓🕟🕔🕠🕕🕡🕖🕢🕗🕣🕘🕤🕙🕥🕚🕦🕛🕧.»

Тут, как видите, шаг полчаса. Я вчера за завтраком сделал Юникодные часы, которые «ходят» поворотом символа (через ЦСС-трансформации). Часовая стрелка очень некрасиво скачет (я только для Вебкита делал и испытывал только в Сафари), потому что мне приходится вращать символ, чтобы минутная стрелка двигалась, а потом переходить на следующий символ. В общем, просто разминка для пальцев. Юникодные часы (3.72КиБ) Рассказать я хотел не об этом. Я и раньше встречался с тем, что часть Юникода не воспринимается многими программами нормально, особенно что касается раздела «Эмодзи, например «Яндекс.Фотки» не так давно порадовали меня следующим (стоило переименовать картинку, всё стало в порядке): «Яндекс.Фотки» (52.51КиБ) Редактор «Сублиме Текст 2» часто падает, если в тексте программы встречаются эти символы, а вот «Сафари» удивил больше всех. Он их, вроде бы, понимает, но как-то не до конца:
"🕐".length; // 2
'🕐'[0]; // строка со «сломанным» символом
escape('🕐'); // "%uD83D%uDD50"
То есть, он считает символы Эмодзи не одним символом, а двумя. Такой вот баг. Мне пришлось в коде на ДжаваСкрипте это учитывать.

Дополнение: в комментариях подсказывают, что вроде так и задумано. Так как этим символы представлены четырьмя байтами (суроггатной парой), ДжаваСкрипт, которые не умеет работать с такой парой как с одним символом, разделяет его на два.
14 марта 2013 10:04

Бабаев Александр (bealex.moikrug.ru)
14 марта 2013, 10:54

Это utf-16 ескейпинг. Вот информация из Character Viewer'а.

🕐 CLOCK FACE ONE OCLOCK Unicode: U+1F550 (U+D83D U+DD50), UTF-8: F0 9F 95 90

А вот тут я нашел все варианты его кодирования в разных кодировках: http://www.fileformat.info/info/unicode/char/1f550/index.htm

Роман Комаров (инкогнито)
14 марта 2013, 11:04

Насколько я помню, это не баг, а фича: http://mathiasbynens.be/notes/javascript-encoding

Евгений Степанищев (bolknote.ru)
14 марта 2013, 11:12, ответ предназначен Бабаев Александр (bealex.moikrug.ru):

Это utf-16 ескейпинг
Суррогатные пары, наверное?

Бабаев Александр (bealex.moikrug.ru)
14 марта 2013, 15:28, ответ предназначен Евгений Степанищев (bolknote.ru):

Суррогатные пары, наверное?
Да, наверное, я в терминологии не силен. :)

Александр Карпинский (инкогнито)
15 марта 2013, 00:51

Все верно, суррогатные пары. Используются для хранения символов с большими индексами в реализациях, где символ представляется только 16 битами. Позволяют хранить дополнительно 20 бит (по 10 значащих бит в каждом символе пары).

Евгений Степанищев (bolknote.ru)
15 марта 2013, 05:44, ответ предназначен Александру Карпинскому

Я знаю, что такое суррогатные пары (http://bolknote.ru/2009/04/15/~2092/), но не ожидал что JS зачем-то разделит один, по сути символ, на два. Ведь строка в JS хранит именно *символы*.

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)