首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WinMerge:如何比较具有相同内容但编码不同的文件?

WinMerge:如何比较具有相同内容但编码不同的文件?
EN

Stack Overflow用户
提问于 2013-01-09 12:44:51
回答 6查看 20.2K关注 0票数 17

动机:我正在重写一个文档--待会儿处理的文本文件。新的来源现在使用UTF-8。大部分资源是相同的。我需要找出不同之处。

详细信息:旧文档源使用cp1250编码,新源使用UTF-8。新源和旧源都使用相同的行尾(CR+LF)。我正在使用WinMerge应用程序(WinMergeU.exe)的Unicode版本,即2.12.4.0版本。

它几乎可以用,但是..。当线条不同时,它们最初被暗黄色标记为块,不同的部分使用较浅的颜色标记。当移动红色块光标到那里时,下面的窗格显示不同的部分。

但是,在文本( Unicode表示形式)相同的情况下,文本块也被标记为暗黄色。红色块也移动到文件的这些部分。在这种情况下,下面的两个窗格(显示差异)包含相同的文本,没有什么被标记为不同。见下图:

第一行不一样但第二行的内容在视觉上是相同的。ASCII范围之外的唯一字符是Ú。它在编码源中有不同的表示形式。这将导致标记为不同的行,但下面的窗格不会将该行处的任意标记标记为不同。

还请参阅以下完全相同的段落(只有源中的编码不同,使用的行结束是相同的)。

看起来,最初的比较是基于行的二进制表示。是否有任何设置可以告诉WinMerge,比较(我指的是块标记)应该基于Unicode内容?

我努力了,但还没有运气。

更新:上面的问题是关于最新稳定的2.12.4的。测试版2.13.22非常适合我。见my answer below

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-01-29 15:07:25

我认为不应该将存储在不同编码中的文件合并到合并工具中。

编码是将字节(存储在磁盘或内存中)映射到字符(显示在屏幕上)的函数。不幸的是,默认情况下,文件的编码不能与文件一起存储。因此,任何要打开文件并显示其内容的程序都需要猜测编码。虽然这有时有效,但它也是一个容易出错的过程。

现在,不同编码的字符集一般不会重叠。那么,如果您将编码X的文件A中的字符C合并为编码Y的B文件,如果字符C不是编码Y字符集的一部分,那么合并工具应该做什么呢?

因此,我认为合并工具的任务应该是合并二进制内容。其他任何东西都是肮脏的黑客,在某种程度上是该死的失败。(合并工具制造商可能决定提供字符级别的合并,这也可能在大多数时间起作用。但也有一些猜测。)

因此,我还建议您首先将旧文件翻译到UTF-8,然后将这些文件与新版本合并。

票数 8
EN

Stack Overflow用户

发布于 2013-01-22 20:03:11

这并不能真正回答您关于WinMerge的问题,但是您考虑过使用另一个diff程序吗?我的最爱之一是kdiff - http://kdiff3.sourceforge.net/

当我使用一个KDiff文件和另一个UTF8文件对UTF8进行比较时,我得到以下信息:

下面是比较屏幕注意,文件上的编码是不同的,但是从文本的角度来看,文件是相等的:

票数 10
EN

Stack Overflow用户

发布于 2013-01-30 14:24:07

仅供参考。问题是最近的稳定指数2.12.4。我已经尝试了测试版2.13.22,它对我来说是完美的。请参见完全相同的文件的差异--仅删除了文件中的第一行。(我非常感谢作者。)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14235484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档