Если вы когда-либо пытались отправить пустое сообщение в Telegram, то, скорее всего, обнаружили, что ни знак пробела, ни знак новой строки (Alt + Enter) не отправляются - поле ввода просто очищается. В то же время вы могли видеть, что другие люди буквально посылают вам пустое место, и они преуспевают. Где же здесь волшебство? Если вам нужен короткий ответ – они вставляют "сломанный" символ u+3164. Вы можете скопировать его из скобок и использовать: "ㅤㅤㅤ". Если вы хотите получить более подробный ответ, ниже мы расскажем вам, откуда берется невидимый текст, как его получить и использовать, почему вы не должны использовать его в коде и какие еще существуют символы.
Невидимый символ – как он работает?
Давайте начнем объяснение с таблиц символов и кодировок. Любой компьютер на аппаратном уровне понимает 2 символа: 0 и 1. Это неудобно для людей, потому что мы все еще больше привыкли к буквам, которые складываются в слова, предложения, абзацы и так далее. Чтобы работать с этими буквами без каких–либо проблем, мы придумали очень простую схему - берем буквы по порядку и присваиваем им уникальные номера: a = 1, b = 2, c = 3 и так далее. Мы также присваиваем уникальные номера заглавным буквам, знакам (точка, запятая, вопросительный знак и так далее), пробелам и цифрам – в списке вырисовывается уникальный идентификатор, который присваивается каждому возможному символу. Этот список называется таблицей кодов символов, и первой распознанной таблицей кодов был ASCII:
Вторая половина пуста. Он предназначен для региональных символов. Сама таблица похожа на справочную информацию. Существует также кодировка – набор инструкций для расшифровки этой таблицы. Кодировки появились из-за региональных стандартов. Они необходимы для того, чтобы "правильно" читать символы. Если мы возьмем кодировку, которая была распространена в СНГ в то время, то в ней будет инструкция: "Чтобы получить букву "г" используйте 8x3 в ASCII"; если мы возьмем кодировку, которая использовалась в Германии в то время, то в ней будет написано: "Чтобы получите букву "β", используя 8x3".
Поскольку это было ужасно неудобно из-за локализации на несколько языков, была изобретена и стандартизирована новая таблица символов - Unicode. Юникод может содержать более 1 000 000 символов. На данный момент в Юникод добавлено около 100 000 символов – таким образом, доступно еще 90% ячеек. Универсальная кодировка UTF была изобретена для Unicode, чтобы дизайнерам было проще рисовать шрифты (да, для каждой отдельной кодировки дизайнерам нужно рисовать отдельный шрифт).
Этого достаточно для предыстории – теперь пришло время выяснить, откуда взялся невидимый персонаж. Все дело в ошибках Unicode: некоторые специальные (управляющие и пробельные) символы ведут себя не так, как предполагалось. Самая интересная группа жуков для нас - это невидимый персонаж. Дело в том, что знак должен быть особенным и должен отображаться как очень маленький пробел, но кодировка воспринимает его как полноценный символ (например, букву или цифру) и отображает его как большой пробел. Возможно, вы уже догадались, как можно использовать невидимую область в качестве полноценного знака – вставить пробел там, где он не предусмотрен.
Невидимый текст – как скопировать и вставить?
Для начала мы сообщим вам печальную новость: даже эти ошибки кодирования постепенно исправляются. Ранее (в 2012 году) во “Вконтакте” был популярен трюк – в статус можно было вставить управляющий символ новой строки, и статус делился на 2 строки. Теперь вы не можете этого сделать – сайт обрабатывает выводимые данные правильно, и такая надпись больше не разрывает строку:
В дополнение к &nsbp, социальные сети и мессенджеры вырезали все управляющие и специальные символы – вы не можете перевернуть текст вверх ногами или отобразить его задом наперед, если это изначально не предусмотрено языком. Существуют такие услуги, как https://textinvert.ru /, которые позволяют изменять текст, но они не переворачивают его с ног на голову, а подбирают похожие буквы на других языках. Для этого требуется специальный алгоритм. Теперь чрезвычайно сложно создать большой пустой текст (хотя это все еще возможно), но невидимые смайлики и пустой знак набора, которые нарушали работу многих шрифтов, также исправлены. Все, что остается, это отправлять пустые сообщения, подобные этим:
Unicode U+3164 для вставки невидимого символа
Итак, самая полезная вещь - это невидимый пробел, он же "пустая строка". На самом деле, таких символов 3, вот их коды:
Код персонажа |
Характер |
U+115F |
ᅟ |
U+1160 |
ᅠ |
U+3164 |
ㅤ |
Чтобы увидеть символ, дважды щелкните по нему в таблице. “Word”, кстати, слегка выделяет символ серым цветом.
Что касается остальных символов, то все еще есть пробельные символы с адресами в области   –  , но мы протестировали их и выяснили, что мессенджеры воспринимают их как обычные пробелы – следовательно, они не представляют интереса. Если они вам все равно нужны или вы хотите протестировать их самостоятельно в разных сервисах – вот еще несколько пробелов и управляющих символов:
Код персонажа |
Что это значит? |
Характер |
U+00A0 |
Пространство без зазора |
|
U+2003 |
Эм пространство |
|
U+2007 |
Фигурный пробел (что бы это ни значило) |
|
U+2008 |
Пробел в знаках препинания |
|
U+2009 |
Узкое пространство |
|
U+205F |
Среднее математическое пространство |
|
U+3000 |
Идеографическое пространство |
|
Что касается трех вышеприведенных символов, изначально они являются заполнителями для перекрывающихся корейских символов. Они рассматриваются как полноценные персонажи, хотя и являются наполнителями. Возможно, такое поведение связано с тем, что при использовании заполнителя иероглиф не следует переносить на новую строку. Если символ считается пробелом, может произойти перенос (это зависит от других управляющих символов). В любом случае, вы можете скопировать пустой символ из таблицы и вставить его туда, куда вам нужно. Но куда его можно вставить – давайте посмотрим ниже.
Невидимый текст в WhatsApp, VK, Instagram, Discord и играх
Как мы уже говорили, все основные платформы позаботились о том, чтобы во время обработки вырезались контрольные, специальные и другие "нестандартные" символы. Поэтому сфера применения таких символов крайне ограничена, хотя в некоторых местах их все же можно использовать.
WhatsApp, Viber, Telegram:
Если вы вставите обычный пробел, то WhatsApp, как и другие мессенджеры, не позволит вам отправить это сообщение – кнопка "Отправить" не появляется. Можно отправить U+3164. В результате получается пустое сообщение.
ВКОНТАКТЕ, Facebook Messenger:
Здесь та же ситуация, что и с мессенджерами – вы можете отправлять пустые сообщения в личные сообщения. Кстати, вы также можете указать U+3164 в статусе ВКонтакте – он будет отображаться в виде пустой строки. Если вы поставите обычный пробел, статус будет удален и будет видна надпись "Установить статус".
TikTok, Instagram: Нет возможности использовать скрытое пространство. Обе платформы рассматривают символ скрытого пробела как обычный пробел.
Разногласия:
Discord позволяет отправлять пустые сообщения. В то же время, если вы попытаетесь создать канал с пустым именем, Discord не позволит вам этого сделать:
часто задаваемые вопросы
Если я введу невидимый символ в Skype, будет ли статус "оффлайн"?
Нет, вы можете написать любой текст в строке состояния учетной записи (включая скрытый пробел), статус “онлайн” или “оффлайн” не изменится.
Каковы проблемы с нулевым символом в программировании?
Вы не должны использовать их в своем коде, если не хотите его испортить. Если вам нужно использовать символ для хранения или вывода, запишите его в переменную или в вывод с помощью кода Unicode. Почему его лучше не использовать? Вот вам пример:
Как вы можете видеть, мы объявили переменную, в имени которой есть пробелы, что запрещено Python. В то же время PyCharm предупреждает, что с этой переменной что-то не так:
Вы не только нарушаете правила языка, но и вставляете палки в колеса: чтобы получить доступ к переменной, вам нужно будет вручную скопировать и вставить ее имя. Если вы делаете какой-то проект для себя и хотите усложнить себе жизнь, вы можете использовать такие пространства, но если вы работаете над каким-то серьезным проектом, даже не пытайтесь этого делать, иначе у вас будут проблемы.
Может ли специальный символ нарушить макет?
Теоретически это возможно при условии, что макет выполнен криво или наследует плохие шаблоны. Лучше не использовать такие символы в макете, если вы этого не хотите, если вы не хотите, чтобы все однажды сломалось.
Можно ли использовать эти символы для взлома?
Технически, один из управляющих символов – ‘\0’ – может быть использован для взлома системы с помощью программы, написанной на C. Нулевой терминатор указывает программе, что строка закончилась, и вредоносный код может быть записан после терминатора. Но это очень сложно, потому что, во-первых, нужно найти программу, которая неправильно обрабатывает входящие строки, а затем еще и позволяет запускать вредоносный код из чужой памяти. Около 15 лет назад это был популярный способ взлома, сейчас он больше похож на музейный экспонат взлома.
часто задаваемые вопросы
Если я введу невидимый символ в Skype, будет ли статус "оффлайн"?
Нет, вы можете написать любой текст в строке состояния учетной записи (включая скрытый пробел), статус “онлайн” или “оффлайн” не изменится.
Каковы проблемы с нулевым символом в программировании?
Вы не должны использовать их в своем коде, если не хотите его испортить. Если вам нужно использовать символ для хранения или вывода, запишите его в переменную или в вывод с помощью кода Unicode. Почему его лучше не использовать? Вот вам пример:
Как вы можете видеть, мы объявили переменную, в имени которой есть пробелы, что запрещено Python. В то же время PyCharm предупреждает, что с этой переменной что-то не так:
Вы не только нарушаете правила языка, но и вставляете палки в колеса: чтобы получить доступ к переменной, вам нужно будет вручную скопировать и вставить ее имя. Если вы делаете какой-то проект для себя и хотите усложнить себе жизнь, вы можете использовать такие пространства, но если вы работаете над каким-то серьезным проектом, даже не пытайтесь этого делать, иначе у вас будут проблемы.
Может ли специальный символ нарушить макет?
Теоретически это возможно при условии, что макет выполнен криво или наследует плохие шаблоны. Лучше не использовать такие символы в макете, если вы этого не хотите, если вы не хотите, чтобы все однажды сломалось.
Можно ли использовать эти символы для взлома?
Технически, один из управляющих символов – ‘\0’ – может быть использован для взлома системы с помощью программы, написанной на C. Нулевой терминатор указывает программе, что строка закончилась, и вредоносный код может быть записан после терминатора. Но это очень сложно, потому что во-первых, нужно найти программу, которая неправильно обрабатывает входящие строки, а затем еще и позволяет запускать вредоносный код из чужой памяти. Около 15 лет назад это был популярный способ взлома, сейчас он больше похож на музейный экспонат взлома.