WinMerge: comment comparer des fichiers avec le même contenu mais des encodages différents?
Motivation: je suis en train de réécrire un doc -- des fichiers textes à traiter plus tard. Les nouvelles sources utilisent maintenant L'UTF-8. Une grande partie des sources sont les mêmes. Je dois trouver des différences.
Détails: les anciennes sources doc utilisent l'encodage cp1250, les nouvelles sources utilisent L'UTF-8. Les sources nouvelles et anciennes utilisent les mêmes fins de ligne (CR+LF). J'utilise la version Unicode de L'application WinMerge (WinMergeU.exe), version 2.12.4.0.
presque fonctionne, mais... Lorsque les lignes diffèrent, elles sont initialement marquées comme bloc par le jaune foncé, et les différentes parties sont marquées en utilisant la couleur plus claire. Lorsque vous déplacez le curseur du bloc rouge, les vitres ci-dessous montrent la partie différente.
cependant, le bloc de texte est marqué par le jaune foncé aussi dans les cas où (la représentation Unicode de) le texte est le même. Le bloc rouge se déplace aussi vers les parties des fichiers. Dans ce cas, les deux panneaux ci-dessous (qui montrent différences) contiennent le même texte et rien n'est marqué comme différent. Voir l'image ci-dessous:
La première ligne diffère -- c'est OK. Mais la deuxième ligne a visuellement le même contenu. Le seul caractère en dehors de la gamme ASCII est Ú
il n'. Il a une représentation différente dans les sources codées. Cela provoque la ligne marquée comme différente, mais les vitres ci-dessous ne marque aucun changement à la ligne comme différente.
Voir aussi les paragraphes suivants qui sont exactement les mêmes (seulement le codage dans les sources diffèrent, la même fin de ligne est utilisée).
il semble que la comparaison initiale était basée sur une représentation binaire des lignes. Y a-t-il un réglage pour dire à WinMerge que la comparaison (je veux dire le marquage de bloc) devrait être basée sur le contenu Unicode?
j'ai tout essayé, mais pas encore de chance.
mise à Jour: la question ci-dessus portait sur la dernière version stable 2.12.4. La version beta 2.13.22 fonctionne parfaitement pour moi. Voir ma réponse ci-dessous.
5 réponses
je pense qu'il ne devrait vraiment pas être la tâche d'un outil de fusion pour permettre la fusion des fichiers stockés dans les différents encodages.
Un codage est une fonction qui cartes octets (stocké sur le disque ou en mémoire) de caractères (affichage sur écran). Malheureusement, par défaut, l'encodage d'un fichier n'est pas enregistrées avec le fichier. Par conséquent, tout programme qui veut ouvrir le fichier et afficher son contenu doit deviner l'encodage. Bien que cela fonctionne parfois, c'est aussi une erreur sujettes à la procédure.
Maintenant, les jeux de caractères des différents encodages ne se chevauchent pas en général. Alors que doit faire l'outil de fusion si vous fusionnez un caractère C du fichier a dans l'encodage X dans un fichier B dans l'encodage Y, si le caractère C ne fait pas partie du jeu de caractères de l'encodage Y?
Donc, je pense que la tâche d'un outil de fusion devrait être de fusionner le contenu binaire. Tout le reste est un sale coup et condamné à échouer à un certain niveau. (Un fabricant d'outils de fusion peut décider de fournir fusion de niveau de caractère, qui pourrait aussi fonctionner la plupart du temps. Mais il y a une conjecture impliquée.)
par conséquent, je vous recommande aussi de traduire d'abord les anciens fichiers en UTF-8 puis de les fusionner avec les nouvelles versions.
cela ne répond pas vraiment à votre question sur WinMerge, mais avez-vous envisagé d'utiliser un autre programme diff? L'un de mes favoris est kdiff - http://kdiff3.sourceforge.net/
quand je fais une comparaison sur KDiff en utilisant un fichier UTF8 et un autre fichier Unicode, j'obtiens ce qui suit:
Voici l'écran de comparaison-notez que les encodages sur les fichiers sont différents, mais les fichiers sont considérés comme égaux à partir d'un texte point de vue:
Juste pour votre information. La question portait sur le dernier modèle stable 2.12.4. J'ai essayé la version beta 2.13.22, et il fonctionne parfaitement pour moi. Voir la différence pour exactement les mêmes fichiers -- seules les premières lignes des fichiers ont été supprimées. (Ma grand merci aux auteurs.)
je recommande de convertir les fichiers au même encodage avant de les diffuser.
si vous travaillez avec un système de contrôle de version, je vous recommande ce qui suit:
- Créer une nouvelle caisse de fichiers
- convertir tous les fichiers en UTF-8
- Valider les fichiers
- copiez vos nouveaux fichiers sur
- Utiliser WinMerge
de cette façon vous finissez avec deux commits dans l'histoire - un pour le changement d'encodage et un autre pour les changements de contenu et WinMerge fonctionnera comme prévu.
Qu'en option File -> File Encoding...
dans WinMerge? Il permet de définir l'encodage des fichiers indépendamment.