WinMerge: Comment comparer des fichiers avec le même contenu, mais de différents codages?
Motivation: je suis réécriture d'une doc-texte des fichiers à traiter plus tard. Les nouvelles sources maintenant utiliser l'UTF-8. De grandes parties de la sources sont les mêmes. J'ai besoin de trouver des différences.
Détails: Le vieux doc sources d'utiliser le cp1250 encodage, les nouvelles sources d'utiliser l'UTF-8. Anciennes et nouvelles sources d'utiliser la même fin de ligne (CR+LF). Je suis l'aide de la version Unicode de la WinMerge application (WinMergeU.exe), version 2.12.4.0.
Il fonctionne presque, mais... Quand les lignes diffèrent, ils sont d'abord marqués comme bloc par le jaune foncé, et les différentes parties sont marqués à l'aide de la couleur plus claire. Lorsque vous déplacez le bloc rouge curseur là-bas, les volets ci-dessous montrent les différentes parties.
Cependant, le bloc de texte est marqué par la couleur jaune foncé également dans les cas où (la représentation Unicode) le texte est le même. Le bloc rouge se déplace également à ces portions de fichiers. Dans de tels cas, les deux volets ci-dessous (qui montrent les différences) de l'information, le même texte, et rien n'est marqué comme différents. 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 personnage en dehors de la plage ASCII est Ú
. Il a une représentation différente dans les sources codées. Cela provoque la ligne marquée comme différents, mais les volets ci-dessous ne marque pas anyting à la ligne comme différents.
Voir aussi les paragraphes suivants qui sont exactement les mêmes (uniquement le codage dans les sources diffèrent, les mêmes caractères de fin de ligne est utilisé).
Il semble que si la comparaison initiale ont été basées sur la représentation binaire des lignes. Est-il un réglage à dire WinMerge que la comparaison (je veux dire le bloc de marquage) devrait être fondée sur le contenu Unicode?
J'ai essayé, mais pas de chance, encore.
Mise à jour: La question ci-dessus a été pour la dernière version stable de 2.12.4. La version bêta 2.13.22 fonctionne parfaitement pour moi. Voir ma réponse ci-dessous.
OriginalL'auteur pepr | 2013-01-09
Vous devez vous connecter pour publier un commentaire.
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, il est aussi une source d'erreurs de procédure.
Maintenant, les jeux de caractères des différents encodages ne se chevauchent pas en général. Quel est donc l'outil de fusion censé faire si vous fusionnez un caractère C à partir d'Un fichier dans le codage de X dans un fichier B dans le codage de Y, si le caractère C ne fait pas partie du jeu de caractères d'encodage Y?
Donc, je pense que la tâche d'un outil de fusion devrait être de fusionner le contenu binaire. Autre chose est un sale hack et condamnés à l'échec, à un certain niveau. (Un outil de fusion maker peut décider de fournir un niveau de personnage fusion, qui pourrait également travailler la plupart du temps. Mais il y a une conjecture implique).
Donc, je voudrais aussi vous recommande d'abord de traduire les anciens fichiers en UTF-8 puis de fusionner ceux avec les nouvelles versions.
Comme je l'ai soutenu, comparaison de fichiers sur le niveau du personnage n'est pas un failproof procédure. C'est pourquoi de nombreux difftools ne le supporte pas et kdiff émet des sons d'avertissement. Et ce n'est pas une activité facile, soit, et c'est probablement pourquoi winmerge ne pas gérer la situation correctement. Peut-être que la conversion de tous les anciens fichiers en UTF-8 semble fastidieux, mais il est certainement la bonne solution à votre problème. (En particulier, la solution est indépendante de la difftool vous utilisez.)
Mon observation est que WinMerge fonctionne très bien lorsque l'on compare les textes. Il trouve les différences entre les textes avec différents encodint. Le seul problème est qu'il ne marque pas les blocs sur la base de la différence. ...les jeux de caractères des différents encodages ne se chevauchent pas en général. Quel est donc l'outil de fusion censé faire... S'il ne peut pas être effectuée en se basant sur des personnages emblématiques, il ne doit pas être fait à l'aide de représentation binaire.
Mon +1 de toute façon. Rien n'est parfait. Je vais réfléchir pour convertir mes scripts en Unicode aussi pour les sources plus anciennes.
merci pour les félicitations. Pourtant, je suis en désaccord avec S'il ne peut pas être effectuée en se basant sur des personnages emblématiques, il ne doit pas être fait à l'aide de représentation binaire. Il est parfaitement raisonnable de comparer deux fichiers si ils ont le même encodage. Ensuite, la comparaison des caractères et la comparaison des octets est exactement la même chose. Aussi, il est parfaitement raisonnable de changer l'encodage d'un fichier unique. Le point important est, ces deux tâches ne sont pas triviales, peut conduire à des problèmes inattendus et nécessitent votre attention. Si vous les mélangez, et vous avez un problème, vous êtes beaucoup plus susceptibles d'être en mesure de le résoudre.
OriginalL'auteur ilmiacs
Ce n'est pas vraiment répondre à votre question à propos de WinMerge, mais avez-vous envisagé d'utiliser un autre diff programme? L'un de mes favoris est kdiff - http://kdiff3.sourceforge.net/
Quand je fais une comparaison sur KDiff l'aide d'un fichier UTF8 et un autre fichier Unicode, je reçois le texte suivant:
Ici est de comparer l'écran de noter que les codages sur les fichiers sont différents, mais les fichiers sont considérés comme étant égaux à partir d'un texte de point de vue:
Résolu. Voir stackoverflow.com/a/14606297/1346705
OriginalL'auteur chue x
Juste pour votre information. La question a été pour la dernière version stable de 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, seulement les premières lignes dans les fichiers ont été supprimés. (Ma grand merci aux auteurs.)
OriginalL'auteur pepr
Je recommande de convertir les fichiers dans le même codage avant de comparaison.
Si vous travaillez avec un système de contrôle de version, je recommande les éléments suivants:
De cette façon, vous deux s'engage dans l'histoire - l'un pour le codage de changement et un autre pour les changements de contenu et de WinMerge fonctionnera comme prévu.
OriginalL'auteur bikeshedder
Qu'en option
File -> File Encoding...
dans WinMerge? Il permet de définir l'encodage pour les fichiers de façon indépendante.OriginalL'auteur Ruslan Osipov