若要檢查兩個文字檔之間的差異,請將原始版本貼在左側、修改後的版本貼在右側,執行比較,然後閱讀一份單一的有序列表,其中新增的內容以加號開頭,刪除的內容以減號開頭,而未變動的行則帶有中性前綴。檢視畫面顯示的是整行而非個別字元或單字,因此一行中的一個字元修改會顯示為一處刪除搭配一處新增。兩側輸入上限為每邊 500 行和 200,000 個 UTF-16 程式碼單位,整個程序都在瀏覽器分頁中執行,不會將任一版本上傳到遠端服務。這種基於行的比較非常適合短篇設定檔、散文草稿、日誌片段、環境檔或小型程式碼摘錄,可用來確認究竟新增、刪除或保留了哪些行。對於較長的檔案、多檔案儲存庫,或跨歷史版本的版本控制,使用原生差異工具或專屬的原始碼控制系統會是更合適的選擇。

how to check difference between two text files
how to check difference between two text files

差異檢視畫面的組織方式

比較的輸出是一欄行,每一列對應來源檔案中依原始順序的一行。每一列都帶有一個前綴,告訴你從左側文字移動到右側文字時,該行發生了什麼變化。

  • 中性前綴:該行在兩側完全相同,屬於共用序列的一部分。
  • 加號 (+):該行僅出現在修改後的文字中,屬於新增。
  • 減號 (−):該行僅出現在原始文字中,屬於刪除。

行不會被編號,檢視畫面也不會交錯插入兩側重新編號的副本。你會看到一條連續的串流,依序走過相符的區段與其間的間隙,因此即使行成群消失或出現,檔案的敘事脈絡仍能保留。

三個步驟執行比較

下列步驟將逐步說明 Text Diff Checker 的完整操作程序。不需要安裝、命令列參數或上傳動作。

  1. 將原始文字貼在左側,將修改後的文字貼在右側。兩個欄位都接受純文字。貼上會取代該欄位中既有的內容,而編輯任一側會清除先前的比較結果,讓顯示的結果隨時反映兩側輸入的目前狀態。
  2. 選擇「比較行」。工具會根據 500 行與 200,000 程式碼單位的上限驗證兩側內容,接著在兩組行陣列之間計算最長共同子序列對齊。
  3. 檢視新增(加號)、刪除(減號)、未變動的行,以及摘要計數。捲動統一的結果列表,並閱讀顯示於行上方或下方的總計,以確認變更的幅度。

若任一側超出限制,比較會在任何計算執行之前被拒絕,且不會靜默截斷內容。請重新貼上較短的摘錄,或先將檔案切割。

為何行的比對是精確而非模糊的

兩行只有在字串完全相等時才算相符。這包括大小寫、每個標點符號、前置空格、尾端空格、Tab 字元,以及每個 Unicode 程式碼點。如果你變更單一個字母、將逗號換成分號、新增一個尾端空格,或將長破折號換成連字號,該受影響的行會被回報為一處刪除和一處新增,而不是細微的行內高亮。

這種粗略的行為是刻意設計的。它能讓設定清單、設定區塊、日誌項目、散文段落和小型程式碼摘錄的比較保持易讀,因為單一變更的行應以獨立事件呈現,而非混雜在逐字元的檢視中。

同一條規則也代表你必須小心隱藏的空白字元。從文書處理器貼上的區塊常帶有不斷行空格或智慧引號,雖然看起來與一般空格和直引號相同,但其實是不同的程式碼點。這些肉眼難辨的差異會以「行已變更」的形式顯現,即使可見文字看起來一樣,因此差異工具也相當適合用來找出從較為華麗的編輯器沿襲而來的雜散格式。

比較工具也能識別不同的行尾慣例。CRLF、單獨的 CR 和 LF 都會被視為行邊界,且一對 CRLF 算作一個邊界而非兩個。邊界語法本身會在分析前正規化,而每行內部的內容則會原封不動地保留。

輸入限制及其存在的原因

每側的上限為 500 行和 200,000 個 UTF-16 程式碼單位。超過任一限制的一側會在建構動態規劃表格之前就被拒絕,因此貼上超大型文件不會凍結分頁,也不會產生部分比較結果。

限制條件數值原因
每側最大行數500為最長共同子序列比較限定二次方等級的運算量。
每側最大字元數200,000 UTF-16 程式碼單位限制輸入儲存與繪製記憶體的使用量。
空輸入視為零行兩個空輸入會產生空白的結果。
非空輸入內的空行屬於有效的行值空行會像其他行一樣參與比對。
行尾正規化識別 CRLF、CR、LF;CRLF 算一個邊界讓 Windows、經典 Mac 與 Unix 貼上內容能順利比較。

行數上限之所以存在,是由於底層演算法在建構最長共同子序列表格時,會將左側每一行與右側每一行進行比較。行數翻倍會讓運算量大約變為四倍,因此明確的上限能讓瀏覽器即便在普通硬體上也維持流暢。字元上限則是因為每個儲存的行與每個繪製的列都會消耗記憶體,而無限制的貼上會迅速降低使用體驗。

如何閱讀摘要計數

在行列表的上方或下方,工具會回報三個與可見前綴對應的總計。

前綴意義計入方式
中性兩側完全相同且包含於共用序列的行未變動
加號 (+)僅出現在右側的行新增
減號 (−)僅出現在左側的行刪除

這些計數衍生自你在主體中看到的同一種行,因此摘要不可能與繪製的檢視畫面不一致。如果總計看起來令人意外,請捲動檢視各行,並確認並非空白字元或行尾差異產生了幽靈般的變更。

何時該改用其他工具

當你手邊有短篇且有界限的文字、想要快速的本機比較、且關心每一行是否變更時,基於瀏覽器的行差異工具便是合適的選擇。當任務超出這些範圍,或你需要工具刻意不提供的功能時,它便不適合。

對於包含許多檔案、改名記錄、歷史記錄、作者資訊與合併衝突解決的軟體專案,請使用像 Git 之類的原始碼控制系統,而非將個別檔案一一貼到瀏覽器中。對於非常大的檔案,請在作業系統上使用原生串流式差異工具,讓比較不需塞進單一分頁。本工具也不會產生適合自動套用的修補檔案、不會偵測移動的區塊、不會忽略空白字元、不會摺疊大小寫、不會剖析程式語言、不會高亮字元層級的編輯,也不會合併衝突。如果上述任何一項功能對你的任務至關重要,請選擇專為其設計的工具。

如需相關的清單式比較,Compare Two Lists 工具可同時輸出聯集、共通、僅 A、僅 B 與對稱差集。若需要超越比較的重複清理作業,「移除重複行」與「移除空行」在單一來源上效果良好。

隱私與確定性

所有的分割、比較、列產生與繪製作業都在當下的瀏覽器分頁中執行。兩段文字都不會被上傳,過程中也不會呼叫任何第三方函式庫或服務。當你關閉或重新整理頁面後,比較結果與兩側輸入都會一併消失。

本工具會產生確定性的輸出:相同的兩組輸入永遠會產生相同順序的列。演算法使用固定的平手規則,當剩餘子序列長度相等時傾向於將其視為新增,這在兩側包含可能以多種有效方式對齊的重複行時特別重要。這個特性在你希望確認所回報的變更是可重現的、而非非確定性對齊的副作用時非常實用。

工具所回報的相等性是依據文件規則下的精確字串相等,而非語意等價。不同的 Unicode 正規化形式、視覺上相似的字元、隱藏的空白字元,以及跳脫字串內部的行尾慣例,都可能會被記錄為差異,即使可見的意義看起來並未改變。對於敏感的變更,請在目的地格式中加以檢查,並保留原始版本直至審查完成。

若你在權衡選項,How to Check Text Difference in Notepad++ Without Compare 對此有詳細說明。

若你在權衡選項,How to Check Text Messages From a Different Phone 對此有詳細說明。