17

動機: ドキュメントを書き直しています -- 後で処理するテキスト ファイルです。新しいソースは UTF-8 を使用するようになりました。ソースの大部分は同じです。違いを見つける必要があります。

詳細:古いドキュメント ソースは cp1250 エンコーディングを使用し、新しいソースは UTF-8 を使用します。新しいソースと古いソースの両方で、同じ行末 (CR+LF) が使用されています。WinMerge アプリケーション (WinMergeU.exe) の Unicode バージョン、バージョン 2.12.4.0 を使用しています。

ほとんど機能しますが... 線が異なる場合、最初は濃い黄色でブロックとしてマークされ、異なる部分は明るい色を使用してマークされます。赤いブロック カーソルをそこに移動すると、下のペインに別の部分が表示されます。

ただし、テキスト (の Unicode 表現) が同じ場合にも、テキストのブロックは濃い黄色でマークされます。赤いブロックもファイルのそれらの部分に移動します。このような場合、下の 2 つのペイン (相違点を示す) には同じテキストが含まれており、相違点としてマークされているものはありません。下の図を参照してください。

差があってはならない行の例。

最初の行が異なります - これは問題ありません。しかし、2 行目の内容は視覚的には同じです。ASCII 範囲外の唯一の文字がÚあります。エンコードされたソースでは異なる表現になっています。これにより、異なるものとしてマークされた行が発生しますが、下のペインでは、その行のどの部分も異なるものとしてマークされません。

まったく同じである次の段落も参照してください (ソースのエンコーディングのみが異なり、同じ行末が使用されます)。

最初の比較は、行のバイナリ表現に基づいているように見えます。WinMerge に、比較 (つまりブロック マーキング) が Unicode コンテンツに基づくべきであることを伝える設定はありますか?

私は一生懸命努力しましたが、まだ運がありません。

更新:上記の質問は、最新の安定版 2.12.4 に対するものでした。ベータ版 2.13.22 は、私にとって完璧に機能します。以下の私の答えを見てください。

4

6 に答える 6

10

これは WinMerge に関するあなたの質問への回答にはなりませんが、別の diff プログラムの使用を検討しましたか? 私のお気に入りの 1 つは kdiff です - http://kdiff3.sourceforge.net/

UTF8 ファイルと別の Unicode ファイルを使用して KDiff を比較すると、次のようになります。KDiff 比較警告

以下は比較画面です。ファイルのエンコーディングは異なりますが、ファイルはテキストの観点からは等しいと見なされます。

KDiff 比較結果

于 2013-01-22T20:03:11.103 に答える
8

異なるエンコーディングで保存されたファイルのマージを許可することは、マージ ツールのタスクであってはならないと思います。

エンコーディングは、バイト (ディスクまたはメモリに格納されている) を文字 (画面に表示される) にマップする機能です。残念ながら、デフォルトでは、ファイルのエンコーディングはファイルと一緒に保存されません。したがって、ファイルを開いてその内容を表示するプログラムは、エンコーディングを推測する必要があります。これは機能する場合もありますが、エラーが発生しやすい手順でもあります。

現在、異なるエンコーディングの文字セットは一般に重複していません。では、文字 C がエンコード Y の文字セットの一部ではない場合、エンコード X のファイル A の文字 C をエンコード Y のファイル B にマージする場合、マージ ツールは何を行うのでしょうか?

したがって、マージ ツールのタスクは、バイナリ コンテンツをマージすることだと思います。それ以外は汚いハックであり、あるレベルで失敗するのは当然です。(マージ ツール メーカーは、文字レベルのマージを提供することを決定する場合があり、これもほとんどの場合は機能する可能性があります。ただし、いくつかの当て推量が含まれます。)

したがって、まず古いファイルを UTF-8 に変換してから、それらを新しいバージョンとマージすることもお勧めします。

于 2013-01-29T15:07:25.370 に答える
4

ご参考まで。質問は、最新の安定版 2.12.4 に関するものでした。ベータ版 2.13.22 を試してみましたが、完璧に動作します。まったく同じファイルの違いを確認してください。ファイルの最初の行だけが削除されています。(著者に心から感謝します。)

ここに画像の説明を入力

于 2013-01-30T14:24:07.907 に答える
1

差分を取る前に、ファイルを同じエンコーディングに変換することをお勧めします。

バージョン管理システムを使用している場合は、次のことをお勧めします。

  1. ファイルの新しいチェックアウトを作成する
  2. すべてのファイルを UTF-8 に変換します
  3. ファイルをコミットする
  4. 新しいファイルをコピーします
  5. WinMerge を使用する

そうすれば、履歴に 2 つのコミットが作成されます。1 つはエンコーディングの変更用で、もう 1 つはコンテンツの変更用であり、WinMerge は期待どおりに動作します。

于 2013-01-29T14:10:01.153 に答える
0

File -> File Encoding...WinMerge のオプションはどうですか? ファイルのエンコードを個別に設定できます。

于 2013-01-29T14:51:23.923 に答える