Статья
Слова, символы и регистр: как на самом деле работает подсчёт текста
Подсчёт текста звучит как единственная задача, в которой компьютер не может ошибиться, и всё же два инструмента могут спокойно выдать разные числа для одного и того же абзаца, один эмодзи способен обойтись в 70 символов SMS вместо привычных, а "280 символов" в X означают не совсем то, что кажется на первый взгляд. За повседневными делами вроде написания текста в рамках лимита, переименования переменных или заполнения макета скрывается несколько правил, которые стоит знать. Эта статья разбирает их по порядку, используя небольшие текстовые инструменты этого сайта как рабочие примеры.
Что считается словом
Большинство счётчиков, включая наш, определяют слово так же, как это делали машинистки: последовательность видимых символов между пробелами или переносами строк. Одно это правило уже объясняет большую часть расхождений. "State-of-the-art" на английском это одно слово или четыре? При разбиении по пробелам это одно слово. Числа, URL-адреса и адреса электронной почты тоже считаются каждый за одно слово. Это соглашение перестаёт работать для языков, которые пишутся без пробелов: в китайском или японском нет пробелов, по которым можно разбивать текст, поэтому "количество слов" теряет смысл и стоит опираться на количество символов. Оценка времени чтения добавляет ещё одно соглашение поверх этого: наш счётчик слов делит количество слов на 200 слов в минуту, обычную среднюю скорость молчаливого чтения у взрослых, так что результат стоит воспринимать как ориентир для планирования, а не как обещание.
Символ не всегда равен одному знаку
Подсчёт символов ещё более запутан, потому что текст в Unicode устроен слоями. То, что вы воспринимаете как один символ (графему), на самом деле может состоять из нескольких кодовых точек, а каждая кодовая точка занимает одну или две из 16-битных единиц, которые считает свойство length в JavaScript. Эмодзи широкой улыбки это одна графема, но две таких единицы, поэтому наивный счётчик покажет 2. Эмодзи семьи, собранное из нескольких эмодзи людей, это одна графема, пять кодовых точек и восемь единиц. Даже обычный текст сталкивается с этой проблемой: "café" может храниться либо с é как одной кодовой точкой, либо как e с последующим комбинирующим акцентом, на экране одинаково, но в подсчёте по-разному. Именно поэтому два счётчика расходятся: они измеряют разные слои. Правила объединения кодовых точек в символы, воспринимаемые пользователем, стандартизированы в приложении Unicode по сегментации текста (UAX #29), и корректно реализованные счётчики следуют ему.

Лимиты, ради которых вы на самом деле считаете
Именно на ограничениях символов подсчёт превращается в деньги. Одно SMS вмещает 160 символов в компактном алфавите GSM-7, но всего один символ за его пределами (эмодзи или буква, которой нет в этом алфавите) переключает всё сообщение на UCS-2, и лимит падает до 70; длинные сообщения делятся на части по 153 или 67 символов, каждая тарифицируется отдельно. X допускает 280 символов на пост, но взвешивает их: любая ссылка считается за 23 символа независимо от реальной длины, а большинство эмодзи и символов CJK (китайских, японских, корейских) считаются за 2. У сниппетов поиска ограничения мягкие: Google обрезает заголовки и описания по ширине в пикселях, поэтому привычные цифры в 60 символов для заголовка и 155 для описания это скорее рабочее соглашение, чем гарантия. Когда лимит действительно важен, считайте по тем же правилам, что и платформа, и оставляйте запас.
Регистр это соглашение, и у каждого стиля есть своё место
Изменение регистра кажется мелочью, пока вы не столкнётесь с соглашениями, наросшими поверх него. Речь идёт о тексте на латинице: идентификаторах в коде или заголовках на английском. В прозе есть Title Case, который предпочитают заголовки в США, и sentence case, которому отдают предпочтение большинство европейских стилевых руководств. У кода свои семейства: camelCase для переменных в JavaScript и Java, PascalCase для имён классов и компонентов, snake_case в Python и базах данных, SCREAMING_SNAKE_CASE для констант и kebab-case для CSS-классов, имён файлов и URL-слагов, где нижний регистр избавляет от классической ловушки со ссылками, различающимися только регистром. Вручную преобразовать десяток идентификаторов не проблема; преобразовать список из восьмидесяти это верный способ наделать опечаток. Конвертер регистра применяет это преобразование механически, включая тонкие моменты вроде того, что делать с аббревиатурами и уже существующими разделителями.

Текст-заполнитель и файлы, которые телефон отказывается открывать
Ещё два дела завершают этот набор. Макеты оценивают на текстах-заполнителях, потому что настоящие предложения отвлекают внимание на свой смысл; lorem ipsum работает именно потому, что это почти, но не совсем, читаемая латынь. Наш генератор создаёт его абзацами, предложениями или словами, так что макет можно заполнить до реалистичной длины вместо повторения одного и того же вставленного блока. А когда кто-то присылает файл .md, .json, .csv или .log, который телефон отказывается открывать, текстовый просмотрщик прямо в браузере отображает его без установки редактора и без пересылки файла на какой-нибудь сервис конвертации. Всё вышеперечисленное, включая подсчёт, работает целиком в вашем браузере: текст никогда не покидает ваше устройство, а это особенно важно, когда вы измеряете черновик, договор или лог, полный внутренних путей.
Инструменты из этой статьи
- Счётчик словСчитайте слова, символы, предложения, абзацы и оценивайте время чтения. В реальном времени, без загрузки.
- Преобразователь регистраПреобразуйте текст между camelCase, snake_case, kebab-case, Title Case и другими форматами. Без загрузки.
- Генератор Lorem IpsumСоздавайте текст-заполнитель lorem ipsum по абзацам, предложениям или словам. Копируйте в один клик. Без загрузки.
- Просмотр текста / кодаОткрывайте текстовые файлы и файлы кода, которые отказывается открывать ваш телефон, Markdown, HTML, JSON, CSV, XML и другие.
Частые вопросы
Сколько слов помещается на странице?
Издательские соглашения говорят примерно о 500 словах для страницы с одинарным интервалом и около 250 для страницы с двойным интервалом, при условии стандартного 12-пунктового шрифта на бумаге формата A4 или letter. Реальные документы отклоняются от этих цифр при каждой смене шрифта, полей или заголовков, поэтому в заданиях и работах на подачу всё чаще указывают именно количество слов, а не страниц. Если текст уже есть, посчитайте его напрямую и пропустите оценку; соглашения о страницах полезны только до того, как текст существует.
Что на самом деле означает lorem ipsum?
Это перемешанная латынь, а не бессмыслица. Стандартный отрывок вырезан и перетасован из трактата Цицерона De finibus bonorum et malorum, философского текста 45 года до н. э.; фрагмент "dolorem ipsum" означает "боль сама по себе". Перетасовка это и есть суть: текст выглядит как естественный язык, с правдоподобной длиной слов и ритмом предложений, но сопротивляется прочтению, поэтому зритель оценивает макет, а не содержание. Его современное распространение обычно связывают с переводными листами Letraset в 1960-х годах и настольными издательскими программами в 1980-х.
Почему платформа считает меньше символов, чем мой счётчик?
Потому что платформы считают с собственными весами. X отталкивается от 280, но тарифицирует каждую ссылку как 23 символа, а большинство эмодзи и символов CJK как 2 каждый. SMS-шлюзы переключают всё сообщение со 160-символьного алфавита GSM-7 на 70-символьный режим UCS-2, как только этого требует хотя бы один символ. И любая платформа может считать кодовые единицы, а не графемы, так что одно семейное эмодзи способно съесть 8 символов лимита. Когда цифра на кнопке не совпадает с вашим счётчиком, побеждают правила платформы; составляйте текст с запасом или проверяйте его встроенным счётчиком платформы перед отправкой.