Сравнить два текста
Вставьте обе версии и посмотрите, что именно изменилось, бок о бок, вплоть до отдельных слов. Тот же алгоритм, что использует git, — а не построчная догадка, которая разваливается, стоит добавить одну строку.
- Не сохраняется
- Без очереди и ожидания
- Без регистрации и водяных знаков
Как это работает
Вставьте обе версии
Исходную слева, новую справа. Или перетащите два файла.
Посмотрите различия
Добавленные, удалённые и изменённые строки отмечены, а внутри изменённой строки подсвечены именно те слова, что поменялись.
Не учитывайте неважное
Регистр, пробелы и пустые строки можно не учитывать по отдельности — и страница сообщит, если тексты совпадают только поэтому.
Что считается одинаковой строкой
Сравниваются ключи, а не сами строки. Каждая строка сводится к ключу в зависимости от включённых параметров «Не учитывать», diff выполняется по ключам, а показывается всегда ваш исходный текст — поэтому включение «Не учитывать регистр» меняет то, какие строки совпадают, но не меняет ни одного символа в отображаемом тексте. Параметров для пробелов два, и различаются они сильнее, чем подсказывают названия: один обрезает пробелы на концах строки, другой сначала сжимает серии пробелов и табуляций до одного пробела, а затем обрезает концы. Ни один не удаляет пробелы полностью, а сжатие ищет только обычные пробелы и табуляции, поэтому идеографический или неразрывный пробел в середине строки остаётся на месте и по-прежнему считается различием.
У параметра «Не учитывать пустые строки» есть последствие, о котором никто не говорит: пустые строки удаляются до начала сравнения, поэтому номера строк рядом с результатом учитывают только оставшиеся строки и перестают совпадать с номерами строк в вашем файле. При выключенном параметре они совпадают точно. Пословная подсветка внутри изменённой строки подчиняется только настройке «Не учитывать регистр» — параметры пробелов на неё не влияют, поэтому различия в пробелах внутри строки, изменённой по другой причине, всё равно подсвечиваются как изменения.
Копируемый результат — это unified diff во всём, что важно для чтения: два заголовка файлов, строки с минусами, строки с плюсами, по три строки контекста вокруг каждого изменения, — но с одним исключением, о котором стоит знать, прежде чем на него полагаться. В маркерах фрагментов нет диапазонов строк, поэтому он предназначен для отчёта об ошибке, комментария при ревью кода или письма, а команды patch и git apply его не примут. Если вам нужно что-то для применения, а не для чтения, создайте его с помощью git.
Если нужно другое
Структурированные форматы плохо сравниваются построчно, и сбой здесь заметный, а не тонкий: два JSON-документа, отличающиеся только порядком ключей, или два CSV с одним переставленным столбцом дают сплошную стену изменений, которая ничего не объясняет. Сравнивайте их инструментом, который понимает структуру: сначала отсортируйте ключи в обоих JSON-файлах и сравните результаты или используйте daff — он сравнивает CSV по строкам и столбцам и скажет, что столбец переместился, а не что изменилась каждая строка.
Две папки или две точки в истории репозитория — вопрос для git, а не для этой страницы. А для текста, где абзацы переразбиты на строки заново, построчный вид — вообще неподходящая детализация: git diff --word-diff не обращает внимания на то, где оказались переносы строк, и показывает только сдвинувшиеся слова — а это именно то сравнение, которое нужно, когда документ переверстали.
Частые вопросы
Мои документы где-нибудь сохраняются?
Нет. Ничего не сохраняется, никакие запросы не отправляются, и инструмент продолжает работать даже без сети. Для текста это важнее, чем кажется: в онлайн-инструменты вставляют неопубликованные тексты, черновики юридических документов, студенческие работы и внутренние документы. Когда сравниваешь две версии договора или черновика, в этом весь смысл.
Чем это лучше построчного сравнения?
Тем, что построчный проход ломается, как только что-то сдвигается. Добавьте одну строку в начало файла — и все строки ниже окажутся на других позициях, так что наивное сравнение объявит изменённым весь документ, а это бесполезно. Здесь используется алгоритм Майерса — тот же, что в git diff и diff(1): он находит наименьший набор вставок и удалений, превращающий один текст в другой. Добавьте строку в начало — и он покажет одну добавленную строку.
Можно ли увидеть, какие слова изменились, а не только строки?
Да. Если строка была отредактирована, а не добавлена или удалена, она сравнивается ещё раз пословно, и подсвечиваются только действительно изменённые слова. В длинном абзаце, где кто-то поменял три слова, вы увидите три слова, а не сплошную заливку цветом.
Что делают параметры «Не учитывать»?
Они меняют то, что считается одинаковой строкой. Можно не учитывать регистр, пробелы или пустые строки — это удобно при сравнении переформатированного кода или заново вставленного текста. Важная деталь: если два текста совпадают ТОЛЬКО потому, что что-то не учитывается, страница прямо об этом говорит, а не объявляет их идентичными. «Идентичны» и «идентичны без учёта регистра» — разные факты, и из-за их путаницы люди отправляют файл, который считали неизменённым.
Можно ли получить результат в виде патча?
Да — сравнение можно скопировать как unified diff, в том же формате, что используют git и патчи по почте, с несколькими строками контекста вокруг каждого изменения. Именно этот формат стоит вставлять в отчёт об ошибке.
Есть ли ограничение размера?
Ограничивает доступная память, а не фиксированный размер. Сравнение двух длинных документов работает быстро, потому что одинаковые начало и конец сопоставляются и пропускаются ещё до основной работы. Если два текста различаются в тысячах отдельных мест, сравнение будет отклонено с объяснением, а не подвесит вкладку, — такой большой diff всё равно невозможно прочитать.
Можно ли сравнить файлы Word или PDF?
Не напрямую. Сначала преобразуйте их в текст — именно это делают наши инструменты [PDF в текст](pdf-to-text) и [DOCX в TXT](docx-to-txt), — а результаты вставьте сюда.
Полезно знать: Сравнение ограничено 8000 различий. Дальше стоимость алгоритма растёт так быстро, что вкладка зависла бы, поэтому страница останавливается и сообщает об этом, а не зависает. Два действительно не связанных документа упираются в этот предел быстро, а две версии одного файла — почти никогда.
Разместите этот инструмент на своём сайте
Бесплатно для любого блога, страницы класса или справочной статьи. Вставьте один фрагмент кода — и посетители смогут пользоваться инструментом прямо на вашей странице.
Похожие инструменты
Счётчик слов
Слова, предложения и время чтения
Удалить повторяющиеся строки
Уберите повторы, отсортируйте и приведите список в порядок
Форматировать JSON
Нечитаемый JSON станет читаемым
Счётчик символов
Символы, байты и что на самом деле считает ваш лимит
Изменить регистр текста
ВЕРХНИЙ, нижний, Как В Заголовке, camelCase и другие
Минификатор HTML
Сожмите HTML, не сломав страницу