文字比對
免費線上文字比對:貼上兩段文字或開檔,逐行標出新增、刪除與修改的字詞,可忽略大小寫與空白、只看差異。免註冊,資料不上傳。
- 逐行比對
- 標出修改字詞
- 忽略空白大小寫
- 只看差異
比對結果
文字只在你的瀏覽器裡比對,不會上傳也不會儲存。
🔒 所有計算都在你的瀏覽器內完成,資料不會上傳到任何伺服器。
什麼時候會用到
- 合約與文件修訂:比較兩版合約或企劃書,找出對方改了哪些字。
- 程式碼與設定檔:沒有 Git 時,快速比對兩段程式或設定的差異。
- 論文與作業:確認修改前後的差別,或檢查兩份文字有多少相同。
- 翻譯與文案校對:比較改稿前後版本,勾選「只顯示差異」快速確認。
使用說明
- 把原始文字貼在左邊、修改後的文字貼在右邊,或按「載入左檔/載入右檔」開啟文字檔,下方會即時列出比對結果。
- 結果中紅底「−」是只在左邊的行(刪除),綠底「+」是只在右邊的行(新增);修改過的行會成對出現,並用較深的底色標出改動的字詞。
- 依需要勾選「忽略大小寫」「忽略空白差異」排除不重要的差異;內容很長時勾「只顯示差異」,相同的段落會收合起來。
實際範例
以預設範例比對兩版 SQL:左邊 5 行、右邊 6 行,結果是 +3 行、−2 行(相同 3 行)。第 1 行從 COUNT(*) AS Cnt 改成 SUM(Amount) AS Total,行內只標出 COUNT→SUM、*→Amount、Cnt→Total,括號與 AS 不標;右邊第 4 行 AND Status = 1 是純新增;最後一行註解只標出「一」改成「二」。
左邊三行 if (x == 1) {、 return TRUE;、},右邊三行 if (x == 1) {、 return true;、}:不勾任何選項時是 +2 行、−2 行,連多出來的空白都會被標出;勾「忽略空白差異」後只剩第 2 行不同(+1、−1),行內只標出 TRUE→true;再勾「忽略大小寫」,三行全部相同。
結果怎麼看
- 狀態列的「+N 行、−N 行」分別是新增與刪除的行數。修改一行會同時算成刪除 1 行與新增 1 行,所以改了 3 行會顯示 +3、−3。
- 每列前兩欄是行號:第一欄是左邊(原始)的行號,第二欄是右邊(修改後)的行號;只有一邊有行號代表那行只存在於那一邊。
- 勾「只顯示差異」時,每個變動前後各保留 2 行相同內容當上下文,其餘收合成「省略 N 行相同內容」。
- 勾了忽略選項後,被視為相同的行顯示的是右邊的原文,例如忽略大小寫時會顯示修改後的寫法。
原理與計算方法
- 逐行比對使用 jsdiff 的差異演算法(Myers 的 O(ND) 演算法),找出把左邊變成右邊所需的最少新增與刪除,結果與 git diff 的思路相同。
- 比對前可先將每一行正規化:忽略空白差異會把連續空白合併成一格並去掉行首行尾空白,忽略大小寫會轉成小寫。正規化只用於比對,畫面仍顯示原文。
- 相鄰的刪除與新增視為一個修改區塊,依序兩兩配對後再做行內比對:中文與日文逐字比較,英文與程式碼以單字為單位,避免單字被切成零碎字母。
- 行內比對中相同字元少於較長那行的 30% 時不標行內差異。換行符號 CRLF、CR 都視同 LF,檔尾的一個換行不算差異。
- 開啟檔案時先用 UTF-8 解碼,若不是合法的 UTF-8 就改用 Big5,對應舊系統或 Excel 匯出的繁體中文檔案。
適用限制
- 只比對純文字內容,字型、顏色、表格等格式不會比對。
- 以「行」為單位比對:同一段文字只是換行位置不同,也會整段顯示為修改。
- 不會偵測搬移:把一段內容移到別處,會顯示成一處刪除加另一處新增。
- 差異極多的超大檔案比對超過 5 秒會停止並顯示錯誤,請分段比對。
- 檔案編碼只自動辨識 UTF-8 與 Big5,其他編碼請先另存成 UTF-8。
常見問題
為什麼有些修改過的行沒有標出改動的字?
成對的兩行如果相同的部分不到較長那行的 30%,代表整行幾乎都改寫了,逐字標記只會滿滿都是顏色,所以只用整行的紅綠底表示刪除與新增。
「忽略空白差異」會忽略哪些東西?
連續的空白或 Tab 會視為一個空格,行首與行尾的空白也不計,所以縮排改變、多打的空格不會被算成差異。空行仍然算一行;若要連空行也忽略,請先刪掉多餘的空行。
可以比對 Word、PDF 或 Excel 檔嗎?
只能直接開啟純文字檔(例如 .txt、.csv、.sql、.json、程式碼)。Word、PDF、Excel 請先把內容複製出來貼上,格式與樣式不會被比對。
我貼上的內容會被上傳嗎?
不會。比對完全在你的瀏覽器裡進行,文字不會傳到伺服器,也不會存在瀏覽器裡,關掉頁面就消失,可以放心比對合約或程式碼。
可以用來檢查抄襲嗎?
可以看出兩段文字哪些部分完全相同,但只能比較你手上的兩份文字;它不會搜尋網路上的其他文章,也不是正式的抄襲檢測系統。
為什麼整段都被標成修改?
常見原因是換行方式不同,例如一邊每句換行、一邊整段只有一行。可以先把兩邊整理成相同的換行方式,或勾選「忽略空白差異」再比對。
文字很長也能比對嗎?
一般文件都能在幾秒內完成;差異非常多、超過時間上限時會提示,請縮小範圍或分段比對。
參考來源
- jsdiff: A javascript text differencing implementation — GitHub
- git-diff Documentation — Git
- Encoding Standard — WHATWG