动机:我正在重写一个文档--待会儿处理的文本文件。新的来源现在使用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。
发布于 2013-01-29 15:07:25
我认为不应该将存储在不同编码中的文件合并到合并工具中。
编码是将字节(存储在磁盘或内存中)映射到字符(显示在屏幕上)的函数。不幸的是,默认情况下,文件的编码不能与文件一起存储。因此,任何要打开文件并显示其内容的程序都需要猜测编码。虽然这有时有效,但它也是一个容易出错的过程。
现在,不同编码的字符集一般不会重叠。那么,如果您将编码X的文件A中的字符C合并为编码Y的B文件,如果字符C不是编码Y字符集的一部分,那么合并工具应该做什么呢?
因此,我认为合并工具的任务应该是合并二进制内容。其他任何东西都是肮脏的黑客,在某种程度上是该死的失败。(合并工具制造商可能决定提供字符级别的合并,这也可能在大多数时间起作用。但也有一些猜测。)
因此,我还建议您首先将旧文件翻译到UTF-8,然后将这些文件与新版本合并。
发布于 2013-01-22 20:03:11
这并不能真正回答您关于WinMerge的问题,但是您考虑过使用另一个diff程序吗?我的最爱之一是kdiff - http://kdiff3.sourceforge.net/。
当我使用一个KDiff文件和另一个UTF8文件对UTF8进行比较时,我得到以下信息:
下面是比较屏幕注意,文件上的编码是不同的,但是从文本的角度来看,文件是相等的:
发布于 2013-01-30 14:24:07
仅供参考。问题是最近的稳定指数2.12.4。我已经尝试了测试版2.13.22,它对我来说是完美的。请参见完全相同的文件的差异--仅删除了文件中的第一行。(我非常感谢作者。)
https://stackoverflow.com/questions/14235484
复制相似问题