动机: 我正在重写一个doc文本文件,以便稍后处理.新的来源现在使用UTF-8.大部分来源是相同的.我需要找到差异.
详细信息:旧的doc源使用cp1250编码,新的源使用UTF-8.新旧源都使用相同的行结尾(CR + LF).我正在使用Unicode版本的WinMerge应用程序(WinMergeU.exe),版本2.12.4.0.
它几乎可以工作,但......当线条不同时,它们最初被暗黄色标记为块,并且使用较浅的颜色标记不同的部分.在那里移动红色块光标时,下面的窗格显示不同的部分.
但是,在文本的(Unicode表示)相同的情况下,文本块也用深黄色标记.红色块也移动到文件的那些部分.在这种情况下,下面的两个窗格(显示差异)包含相同的文本,没有任何标记为不同.见下图:

第一行不同 - 这没关系.但第二行在视觉上具有相同的内容.ASCII范围之外的唯一字符就在Ú那里.它在编码源中具有不同的表示.这会导致标记为不同的行,但下面的窗格不会将该行标记为不同.
另请参阅以下完全相同的段落(仅源中的编码不同,使用相同的行结尾).
看起来好像初始比较是基于线的二进制表示.是否有任何设置告诉WinMerge比较(我的意思是块标记)应该基于Unicode内容?
我努力了,但没有运气.
更新:以上问题是针对最新稳定的2.12.4.测试版2.13.22非常适合我.请参阅下面的答案.
chu*_*e x 10
这并没有真正回答你关于WinMerge的问题,但是你考虑过使用另一个差异程序吗?我最喜欢的一个是kdiff - http://kdiff3.sourceforge.net/
当我使用一个UTF8文件和另一个Unicode文件对KDiff进行比较时,我得到以下结果:
这是比较屏幕 - 请注意文件上的编码是不同的,但从文本的角度来看,文件被认为是相同的:

我认为合并工具的任务不应该是允许合并存储在不同编码中的文件.
编码是将字节(存储在磁盘或内存中)映射到字符(显示在屏幕上)的函数.不幸的是,默认情况下,文件的编码不与文件一起存储.因此,任何想要打开文件并显示其内容的程序都需要猜测编码.虽然这有时会起作用,但它也是一个容易出错的过程.
现在,不同编码的字符集一般不重叠.那么,如果将编码X中的文件A中的字符C合并到编码Y中的文件B中,如果字符C不是编码Y字符集的一部分,那么合并工具应该做什么?
因此,我认为合并工具的任务应该是合并二进制内容.任何其他东西都是肮脏的黑客,并且在某种程度上会失败.(合并工具制造商可能会决定提供字符级别合并,这也可能在大多数情况下都有效.但是需要进行一些猜测.)
因此,我还建议您先将旧文件翻译为UTF-8,然后将这些文件与新版本合并.
仅供您参考。问题是针对最新的稳定版 2.12.4。我已经尝试过 beta 版本 2.13.22,它非常适合我。查看完全相同的文件的差异 - 仅删除了文件中的第一行。(非常感谢作者。)

| 归档时间: |
|
| 查看次数: |
15581 次 |
| 最近记录: |