Сегодня я был удивлен, увидев, что парень взломал ограничение на 140 символов в Твиттере. Сообщение состоит из 930 символов. Как это могло быть возможно?
Прямая ссылка на этот твит здесь . Для удобства скопирую скриншот полного твита ниже:
Сегодня я был удивлен, увидев, что парень взломал ограничение на 140 символов в Твиттере. Сообщение состоит из 930 символов. Как это могло быть возможно?
Прямая ссылка на этот твит здесь . Для удобства скопирую скриншот полного твита ниже:
Ответы:
Сообщение содержит суррогатные кодовые точки Unicode, которые неправильно кодируются как UTF-8. Этот вид неправильного кодирования также называется CESU-8 . Похоже, что некоторые интерфейсы Twitter будут принимать кодированные суррогатные кодовые точки CESU-8 в виде символов (с целью ограничения в 140 символов), но для целей отображения он ожидает действительный UTF-8, а они не являются действительными последовательностями UTF-8. Таким образом, вместо этого он отображает 3 байта каждой из этих последовательностей в виде восьмеричных escape-последовательностей в стиле C по 4 символа в каждой, и каждая суррогатная кодовая точка заканчивается отображением с использованием 12 символов.
Например, \ 355 \ 240 \ 265 \ 355 \ 263 \ 220 при декодировании как UTF-8 с C-экранированием, без отклонения суррогатов, как это обычно делается при декодировании UTF-8, декодирование в суррогатную пару U + D835 U + DCD0. Обработка этой суррогатной пары как UTF-16, как это было бы сделано при декодировании CESU-8, приводит к появлению символа Unicode U + 1D4D0 МАТЕМАТИЧЕСКИЙ КАПИТАЛ БОЛЬШОГО СКРИПТА A (𝓐).
Если восьмеричное экранирование в стиле C декодируется, а затем результат интерпретируется как CESU-8, то получается:
Ит 𝓐𝓛𝓜𝓐𝓣𝓨 𝓐𝓛𝓜𝓐𝓣𝓨 Твиттим и не ограничиваемся людиии !!!!!! 140 не предел! =)))) 𝓐𝓛𝓜𝓐𝓣𝓨 𝓐𝓛𝓜𝓐𝓣𝓨 𝓐𝓛𝓜𝓐𝓣𝓨
Вот как изображение для тех, у кого не установлен полный набор шрифтов Unicode:
Каждая группа символов, начинающаяся с обратной косой черты и сопровождаемая тремя числами, является « последовательностью побега ». Каждый из них представляет один символ. Они обычно используются для символов, которых нет на вашей клавиатуре, таких как символы и символы не на английском языке.
Я предполагаю, что при подсчете символов Твиттер считает каждую из этих групп как один символ, но при отображении их в браузере он печатает их как четыре.
Обновить:
Некоторые из доступных escape-последовательностей являются «управляющими символами». Они говорят компьютеру сделать что-то, например, воспроизвести звуковой сигнал или переместить курсор влево или вправо или вверх или вниз, или удалить символ слева от курсора. Хотя ни один из них не является последним, о котором я упомянул (удаляя предыдущий символ), он мог бы использовать этот символ, чтобы сбить с толку и Twitter.
Интересно, что если вернуться к обычным персонажам, это будет довольно повторяющимся и выглядит примерно так:
í µ í ³ í µ í ³ › í µ í ³ œ í µ í ³ í µ í ³ £ í µ í ³ ¨ í µ í ³ í µ í ³ › í µ í ³ œ í µ í ³ í µ í ³ £ í µ í ³ ¨
Обновление 2:
Объяснение, которое он дал, было «Пишите в DM, всегда на связи)», которое Google Translate говорит мне: «Пишите в DM, всегда на связи)». Я не уверен точно, что это значит или как это помогает.