Перейти к содержимому

Инструменты для текста, которые не хранят ваш текст

Одиннадцать инструментов, чтобы считать, сравнивать, очищать и читать текст. Черновики, списки и исходный код не сохраняются.

11 инструментов, без регистрации и водяных знаков

«Счётчик слов» и «Счётчик символов» отвечают на вопрос «какой это длины», «Сравнить тексты» — на вопрос «что изменилось», а «Удалить повторяющиеся строки» приводит список в порядок. Инструменты просмотра — для файлов, которые вам прислали и которые не открываются как надо, а три минификатора — для кода, который отправляется в продакшен. Ниже списка — о том, почему два инструмента могут по-разному посчитать один и тот же текст и почему две одинаковые на вид строки иногда вовсе не одна и та же строка.

Подсчёт и сравнение

3 инструмента

Правильно считайте слова и символы на любом языке и смотрите, что именно изменилось между двумя версиями.

Просмотр файлов

3 инструмента

Читайте CSV, XML-файлы и документы Markdown как следует — без того, чтобы табличный редактор сначала их испортил.

Что такое текст на самом деле и почему инструменты в нём расходятся

Текстовый файл — это байты плюс кодировка, а кодировка в файле не хранится. Только соглашение сообщает программе, что определённый байт означает «é», — поэтому один и тот же файл в одном месте открывается правильно, а в другом превращается в «Ã©». UTF-8 — современное решение: обычные латинские буквы он хранит в одном байте, буквы с диакритикой — в двух, а большую часть китайского, японского, арабского и все эмодзи — в трёх или четырёх. UTF-16 используют внутри Windows и JavaScript: почти всё хранится в двух байтах, остальное — в четырёх. Windows-1252 и Latin-1 — однобайтовые кодировки, которые до сих пор выдают старые системы, и обычно именно они порождают «кракозябры». Что полезно знать об этих страницах: «Просмотр CSV» определяет кодировку добавленного файла, включая UTF-16 и Windows-1252, и позволяет её сменить. Простые текстовые поля этого не делают — перетащенный файл читается как UTF-8, поэтому в экспорте в Latin-1 буквы с диакритикой отобразятся неправильно, и решение — сначала его конвертировать.

У слова «символ» четыре значения, и нужное зависит от того, кто устанавливает ограничение. То, что человек видит как один символ, — это кластер графем. То, чему соответствует регулярное выражение, — кодовая точка. То, что возвращает string.length в JavaScript, — единицы UTF-16. То, что измеряет столбец базы данных или HTTP-заголовок, — байты UTF-8. Для простого английского текста все четыре совпадают, поэтому никто и не замечает, — а потом эмодзи «семья» оказывается одной графемой, семью кодовыми точками, одиннадцатью единицами UTF-16 и двадцатью пятью байтами, и сообщение из 200 символов не проходит в поле на 255 символов. Именно поэтому «Счётчик символов» показывает все четыре значения.

Невидимые символы — настоящие символы. Неразрывный пробел выглядит точно так же, как обычный, но это совершенно другой символ — он постоянно попадает в текст, скопированный с веб-страницы или из текстового редактора, и ломает поиск, разбор CSV и код, который разбивает строку по пробелам. Соединители нулевой ширины удерживают вместе эмодзи с несколькими людьми. Мягкие переносы, метки направления текста и метки порядка байтов тоже путешествуют вместе со вставленным текстом. Ничего из этого на экране не видно, поэтому единственный сигнал — счёт, который не совпадает с тем, что вы видите, и это одно из честных применений счётчика символов. Учтите, что параметр «Не учитывать все пробелы» в «Сравнить тексты» схлопывает обычные пробелы и табуляции, но не считает неразрывный пробел пробелом, потому что это не одно и то же.

Концы строк — причина, по которой сравнение иногда показывает изменёнными все строки. Windows заканчивает строку возвратом каретки и переводом строки, все остальные — только переводом строки. Сохраните файл с LF в редакторе на Windows — и каждая строка теперь отличается на один невидимый байт, так что побайтовое сравнение — git diff, diff(1) — сообщит, что файл переписан целиком, и спрячет единственное изменение, которое вы на самом деле внесли. Наши «Сравнить тексты» и «Удалить повторяющиеся строки» перед сравнением разбивают текст по всем трём соглашениям, поэтому файл, у которого поменялись только концы строк, не превращается здесь в сплошную красную стену. В инструменте для чтения это удобство, а в репозитории — ловушка: исправляйте это в источнике — в редакторе или в собственных настройках концов строк в git.

Две одинаковые на вид строки могут оказаться разными, и обычно дело в нормализации. В Unicode «é» можно записать двумя способами: одной кодовой точкой или обычной «e» с последующим комбинируемым акутом. Выглядят они одинаково, но это разные последовательности байтов, поэтому сравнение, удаление повторов или поиск в базе данных считают их двумя разными значениями. macOS и Windows исторически расходились в том, какую форму использовать для имён файлов, — так в списке, собранном с двух компьютеров, появляются на вид точные дубликаты, которые не удаляются. Заметить это поможет «Счётчик символов»: у двух форм одинаковое число графем и разное число кодовых точек. Ни один из этих инструментов не переводит одну форму в другую — это задача на одну строку для скрипта с библиотекой Unicode, например unicodedata.normalize в Python.

«Количество слов» — это суждение, а не измерение. Разбиение по пробелам — правило английского языка, и если применить его к китайскому, японскому или тайскому, где слова не разделяются пробелами, длинная статья окажется одним словом. Наш счётчик вместо этого использует встроенную в браузер сегментацию слов Unicode, которая знает, где начинаются слова в любой письменности. Остальные расхождения касаются дефисов («well-known» — одно слово здесь и в Word, два — в некоторых инструментах), отдельно стоящих чисел и того, что считать предложением: «We met Dr. Smith» — одно предложение, а наивный разбор насчитает два. Время чтения — ещё одна оценка поверх этого: 238 слов в минуту при чтении про себя, по данным метаанализа, а не круглое число, которое кочует из блога в блог.

Когда браузер действительно не подходит

Ничего в этом разделе никуда не отправляется и не сохраняется, поэтому сюда безопасно вставлять неопубликованный черновик или закрытый исходный код. Но это же задаёт и потолок, и лучше мы скажем, где он, чем вы узнаете на полпути.

Большие файлы. Весь текст хранится в памяти вкладки и заново анализируется по мере ввода. Несколько мегабайт — комфортно; лог-файл на несколько сотен мегабайт — нет, а телефон сдастся раньше ноутбука. У командной строки такой проблемы нет, потому что она работает потоком: grep и ripgrep ищут в файлах больше вашей памяти, sed и awk преобразуют их построчно, а sort с флагом уникальности удаляет повторы из списка в десятки миллионов строк, выгружая данные на диск. Всё это бесплатно и уже установлено в macOS и Linux.

Сильно различающиеся документы. «Сравнить тексты» останавливается на 8000 различий, потому что дальше потребление памяти алгоритмом растёт так быстро, что вкладка зависает, а такое большое сравнение всё равно невозможно читать. Две версии одного документа почти никогда до этого предела не доходят, а два несвязанных документа доходят сразу. Для ревью кода diff и git diff справятся с любым объёмом, а полноценный инструмент трёхстороннего слияния делает то, чего эта страница не умеет вообще.

Смена кодировки или нормализация Unicode. Эти страницы читают и сообщают, но не конвертируют между кодировками. iconv конвертирует между всеми существующими кодировками, команда file угадывает, что у вас за файл, а нормализация Unicode — это одна строка на Python или вызов uconv из ICU. Если вы чините экспорт с «кракозябрами», вот нужный набор инструментов.

Всё повторяющееся. Эти инструменты работают, когда человек нажимает кнопку. Подсчёт слов в четырёхстах документах или минификация папки при каждом коммите — это скрипт или шаг сборки, а для минификации ваш сборщик делает то же самое, но с картами кода (source maps), режимом наблюдения и кешированием, которых у поля для вставки нет. Эта страница — для одного файла, который у вас перед глазами.

Современный CSS. «Минификатор CSS» отказывается обрабатывать нативную вложенность и современный синтаксис диапазонов в медиазапросах, потому что минификатор, на котором он построен, старше обоих и молча удаляет то, чего не понимает. Это честный отказ, а не функция, и решение — сначала скомпилировать вложенность с помощью Sass, PostCSS или Lightning CSS, что ваш сборщик почти наверняка уже делает.

Как выбрать между похожими инструментами

Счётчик слов или Счётчик символов? Подсчёт один, главные цифры разные. «Счётчик слов» на первом месте показывает слова, предложения, абзацы и время чтения — то, чем измеряют эссе, статью или речь. «Счётчик символов» на первом месте показывает символы, символы без пробелов и байты UTF-8 — то, чем измеряют метаописание, сегмент SMS или поле базы данных. Если ваш текст отклонили как слишком длинный, вам нужен счётчик символов, а точнее — его подсчёт байтов.

Сравнить тексты или Удалить повторяющиеся строки? Сравнение отвечает на вопрос «что изменилось между этими двумя версиями», и ему нужны два текста. Удаление повторов работает с одним списком и отвечает на вопрос «что здесь встречается больше одного раза»; кроме того, оно покажет, какие записи повторялись и сколько раз, отсортирует в естественном порядке, чтобы item2 шёл перед item10, или оставит только строки, которые встретились ровно один раз. Найти записи, которые есть только в одном из двух списков, — задача удаления повторов, а не сравнения.

Минификатор HTML, Минификатор CSS или Минификатор JavaScript? Три языка, три минификатора и одно пересечение, о котором стоит знать: минификатор HTML также минифицирует CSS внутри блоков style и JavaScript внутри блоков script — так же, как две другие страницы. Поэтому для одного HTML-файла нужен один инструмент, а не три. Отдельным файлам .css и .js нужны свои страницы.

«Просмотр XML» или «Форматировать XML» и «Проверить XML». Просмотр здесь даёт сворачиваемое дерево для изучения — то, что нужно, когда документ большой и вы что-то в нём ищете. Форматирование и проверка из инструментов для разработчиков дают текст с отступами, который можно вставить обратно в файл, и точные строку и столбец ошибки. Чтение — против правки и исправления.

«Просмотр CSV» или открыть файл в Excel. Это не конкурирующий инструмент, но сравнивают на практике именно так. Excel конвертирует данные при открытии и не спрашивает: код товара 00123 становится 123, артикул 5-3 — датой «5 марта», длинный номер заказа — экспоненциальной записью, а экспорт с разделителем «точка с запятой» из немецкой системы целиком оказывается в столбце A. Просмотр показывает каждое значение как текст, ровно так, как оно хранится, и вы видите, что вам на самом деле прислали.

Предпросмотр Markdown или Markdown в PDF? Предпросмотр нужен, чтобы в реальном времени, по мере ввода, проверить, что README отображается так, как его покажет GitHub. «Markdown в PDF» из инструментов для документов создаёт готовый документ с разрывами страниц. Проверяйте здесь, публикуйте там.

На чём построены эти инструменты

Движки с открытым исходным кодом, которые выполняют основную работу, и спецификации, которые они реализуют.

  • Unicode Annex #15Specification — объясняет нормализацию — почему две одинаковые на вид строки могут различаться.
  • Unicode Annex #29Specification — определяет кластеры графем — вот что на самом деле означает «один символ».
  • cssoMIT — минифицирует CSS.
  • TerserBSD-2-Clause — минифицирует JavaScript.
  • markdown-itMIT — отрисовывает предпросмотр Markdown.

Частые вопросы

Хранится ли где-нибудь мой текст?

Нет. Ничего не сохраняется, ничего не записывается в журнал, и запросы не выполняются. Когда страница загрузится, отключитесь от интернета — всё продолжит работать. Для текста это важнее, чем кажется: в онлайн-счётчики и инструменты сравнения люди вставляют неопубликованные тексты, черновики юридических документов, студенческие работы и закрытый исходный код.

Почему количество слов отличается от Microsoft Word или другого сайта?

Потому что подсчёт требует решений. Слова через дефис, отдельно стоящие числа, что завершает предложение и что разделяет абзацы — всё это решения, и инструменты принимают их по-разному. Наш счётчик считает «well-known» одним словом, считает границей абзаца пустую строку, а не каждый перенос строки, и не разбивает предложение после сокращения вроде «Dr.», — а ещё он использует сегментацию слов Unicode, поэтому китайский и японский текст считается правильно, а не как одно огромное слово. Для обычной прозы цифры почти совпадают; для списка артикулов — нет.

Почему в перетащенном файле вместо «é» написано «Ã©»?

Потому что это не UTF-8. Текстовые поля читают перетащенный файл как UTF-8, а это почти всё, что создано в этом веке, но старый экспорт может быть в Windows-1252 или Latin-1, и там те же байты означают другое. Одна конвертация с помощью iconv исправит это навсегда. «Просмотр CSV» среди этих инструментов — исключение: он определяет кодировку и позволяет её сменить, если она определена неверно.

Почему после удаления повторов дубликаты всё ещё остались?

Почти всегда из-за пробелов в конце строки: они невидимы, но делают две строки действительно разными. Поэтому по умолчанию пробелы по краям перед сравнением не учитываются, и это влияет только на сравнение — оставшаяся строка сохраняет исходный текст. Другая причина — Unicode: буква с диакритикой, записанная одним символом и буквой с комбинируемым знаком, выглядит одинаково, но это не одно и то же. Здесь ничто не нормализует такие строки за вас.

Работают ли они с документом Word, PDF или таблицей?

Не напрямую — эти инструменты работают с текстом, поэтому и срабатывают мгновенно. Сначала конвертируйте: наши [PDF в текст](pdf-to-text) и [DOCX в TXT](docx-to-txt) делают именно это, и результат можно сразу вставить сюда. Исключение — CSV: он открывается прямо в «Просмотре CSV».

Есть ли ограничение по размеру или в день?

Нет ни аккаунта, ни квоты, ни дневного лимита, потому что нет сервера, который бы что-то считал. Предел — память вашего устройства. Единственное явное ограничение есть в «Сравнить тексты»: сравнение останавливается на 8000 различий и прямо сообщает об этом, а не подвешивает вкладку, — две версии одного документа почти никогда к этому пределу не приближаются.

Другие категории инструментов

Инструменты для PDFКонвертация, редактирование, оптимизация и защита PDF-документов.Инструменты для изображенийКонвертация, сжатие, оптимизация и редактирование изображений.Инструменты для документовКонвертация офисных документов и электронных книг и работа с ними.Инструменты для таблицКонвертация таблиц и форматов структурированных данных.Инструменты для переводаПеревод файлов Word и Excel с сохранением оформления.Инструменты для видеоКонвертация, сжатие и редактирование видеофайлов.Инструменты для аудиоКонвертация, обрезка, объединение и настройка громкости аудиофайлов.Инструменты OCRИзвлечение текста и данных из изображений и документов.Инструменты для архивовОткрывайте файлы ZIP, RAR, 7z и TAR и создавайте свои — ничего не сохраняется.Инструменты для разработчиковФорматирование, проверка и повседневные утилиты для разработчиков.