对比两段文本
粘贴两个版本,并排清楚看到改了什么,精确到每个词。使用与git相同的算法——而不是那种一加一行就全乱套的逐行比对。
- 绝不存储
- 无需排队,无需等待
- 无需注册,无水印
使用方法
粘贴两个版本
原文在左,新版本在右。也可以拖放两个文件。
查看差异
新增、删除和修改的行都会被标出,修改过的行中还会高亮具体改动的词语。
忽略无关紧要的差异
大小写、空白和空行都可以分别忽略——如果两段文本只是因为这些才一致,页面会告诉您。
什么算作同一行
对比是在“键”上进行的,而不是在行本身上。每一行都会根据开启的忽略选项被简化成一个键,差异算法在这些键上运行,而显示给您的始终是原始文本——所以开启“忽略大小写”只会改变哪些行被视为匹配,不会改动显示内容中的任何一个字符。有两个独立的空白选项,它们的区别比标签看上去更大:一个只去掉行首和行尾的空格,另一个先把连续的空格和制表符合并为一个空格,再去掉首尾。两者都不会彻底删除空白,而且合并只针对字面意义上的空格和制表符,所以行中间的全角空格或不换行空格不会被处理,仍然会被算作差异。
忽略空行这个选项有一个没人提起的后果:空行在对比开始前就被删掉了,所以结果旁边的行号只统计保留下来的行,会与您文件中的行号对不上。关闭这个选项时,行号完全一致。修改行内的词级高亮只跟随“忽略大小写”设置,与其他设置无关——空白选项影响不到它,所以一行如果因为别的原因被修改了,行内的空白差异仍会被标为改动。
可复制的结果在阅读层面上完全是统一差异格式——两个文件头、减号行、加号行、每处改动周围三行上下文——但在依赖它之前,有一个例外值得了解。它的差异块标记不带行号范围,所以它适合用于错误报告、代码审查评论或邮件,patch和git apply命令会拒绝它。如果您需要的是可以应用的补丁,而不是用来阅读的内容,请用git生成。
如果您需要的是别的
结构化格式按行对比效果很差,而且失败得很明显,而不是很隐蔽:两个只是键的顺序不同的JSON文档,或者两个只移动了一列的CSV,得到的都是满屏的改动,什么也说明不了。请改用理解数据结构的工具来对比——先把两个JSON文件的键排好序再对比,或者使用daff,它按行和列对比CSV,会告诉您某一列移动了,而不是每一行都改了。
两个目录,或者仓库历史中的两个时间点,是git该回答的问题,而不是本页。对于段落被重新换行的文章,按行查看的粒度完全不对——git diff --word-diff会忽略换行的位置,只显示变动的词语,这才是文档被重新排版后您真正想要的对比。
常见问题
我的文档会被存储吗?
不会。不存储任何内容,也不发出任何请求,断开网络后照样能用。对文本来说,这一点比看上去更重要:人们粘贴到在线工具里的,往往是未发表的文章、法律文书草稿、学生作业和内部文件。对比合同或草稿的两个版本时,这正是关键所在。
为什么这比逐行比对更好?
因为逐行比对只要有任何内容移动就会失效。在文件开头加一行,下面的每一行都错开到了不同的位置,简单的比对就会报告整个文档都改了——这毫无用处。本工具使用Myers算法,也就是git diff和diff(1)背后的算法,它会找出把一段文本变成另一段所需的最少插入和删除。在开头加一行,它就只报告新增了一行。
能显示哪些词改了,而不只是哪些行改了吗?
能。如果某一行是被编辑过,而不是新增或删除,它会再按词逐一对比,只高亮真正改动的词语。一个长段落里有人改了三个词,您看到的就是这三个词,而不是满屏的颜色。
“忽略”选项有什么作用?
它们改变的是“什么算作同一行”。对比重新排版的代码或重新粘贴的文本时,忽略大小写、空白或空行会很有用。有一个重要细节:如果两段文本只是因为忽略了某些内容才一致,页面会明确说明,而不是报告它们完全相同——“完全相同”和“忽略大小写后相同”是两回事,把两者混为一谈,就会有人把自以为没改过的文件发布出去。
能把结果导出为补丁吗?
能——对比结果可以复制为统一差异格式(unified diff),也就是git和邮件补丁使用的格式,每处改动周围带有几行上下文。这正是适合粘贴到错误报告里的格式。
有大小限制吗?
受可用内存限制,而不是固定的大小上限。对比两份长文档很快,因为在真正开始计算之前,相同的开头和结尾会先被匹配并跳过。两段文本如果在几千个不同的地方有差异,会被拒绝并说明原因,而不是让标签页卡死——那么大的差异本来也没法阅读。
能对比Word或PDF文件吗?
不能直接对比。请先把它们转换为文本——我们的[PDF转文本](pdf-to-text)和[DOCX转TXT](docx-to-txt)工具正是做这个的——再把结果粘贴到这里。
小贴士: 对比结果最多包含8000处差异。超过这个数量,算法的开销会增长到足以让标签页卡死,所以页面会停下来并说明原因,而不是卡住不动——两份完全无关的文档很快就会达到这个上限。而对比同一文件的两个版本,几乎从来不会。
把这个工具放到您的网站上
博客、课程页面或帮助文章均可免费使用。粘贴一段代码,访客就能直接在您的页面上使用。