Question

GNU diff ne semble pas être assez intelligent pour détecter et gérer les fichiers UTF-16, ce qui me surprend. Est-ce que je manque une option de ligne de commande évidente? Y at-il une bonne alternative?

Était-ce utile?

La solution

De la documentation GNU diff:

  

Manutention Multibyte et en faisant varier de largeur   Caractères

     

diff, diff3 et sdiff traiter chaque ligne   d'entrée en tant que chaîne de unibyte   personnages. Cela peut mishandle   caractères multi-octets, dans certains cas.   Par exemple, lorsqu'on lui a demandé d'ignorer   espaces, diff n'ignore pas correctement   un espace multi-octets.

     

, diff suppose également que chaque actuellement   octet est une colonne de large, et ce   supposition est incorrecte dans certains   locales, par exemple, les paramètres régionaux qui utilisent UTF-8   codage. Cela provoque des problèmes avec   l'option -y ou --side-à-côte de   diff.

     

Ces problèmes doivent être fixés   sans affecter indûment la   la performance des services publics en   environnements unibyte.

     

Le IBM GNU / Linux Technology Center   Internationalisation équipe a proposé   quelques patches pour le support   diff internationalisé    http: / /oss.software.ibm.com/developer/opensource/linux/patches/i18n/diffutils-2.7.2-i18n-0.1.patch.gz.   Malheureusement, ces patchs sont   incomplets et sont une ancienne version   de diff, donc plus de travail doit être fait   dans ce domaine.

Je ne avais jamais réalisé que moi-même.

On dirait que Guiffy pourrait au travail si un non-libre, outil de ligne non-commande fera le travail, toujours à la recherche d'un outil de ligne de commande freeware:

http://www.guiffy.com/Diff-Tool.html

Autres conseils

vimdiff fonctionne assez bien à cet effet.

Je l'ai trouvé en ce StackOverflow répondre .

Installer ripgrep utilitaire qui supporte UTF-16, puis exécuter:

diff <(rg -N . file1.txt) <(rg -N . file2.txt)
  

ripgrep prend en charge la recherche de fichiers dans encodages texte autres que UTF-8, comme UTF-16, latin-1, GBK, EUC-JP, Shift_JIS et plus. (Certains de support pour détecter automatiquement UTF-16 est fourni. Les autres codages de texte doivent être spécifiés spécifiquement avec le -E / --encoding flag.)

malforms patches lorsque des accents ou des caractères spéciaux sont utilisés:

 diff --version
 diff (GNU diffutils) 3.6
 diff -Naur old_foo new_foo > foo.patch

poignées correctement les accents ou des caractères spéciaux si des fichiers par rapport / dirs sont dans un dossier git.

 git --version
 git version 2.17.1
 git diff --no-index old_foo new_foo > foo.patch

Vous pourriez peut-être construire quelque chose en python avec l'excellent chardet, puis convertir vos fichiers en UTF-8 et l'envoyer à GNU diff?

http://chardet.feedparser.org/

En Python, vous pouvez utiliser difflib.HtmlDiff pour créer un tableau HTML qui montre les différences entre les deux séquences de lignes, et il semble fonctionner correctement avec des chaînes Unicode (à condition, bien sûr, vous lisez et écrivez-le approprié codecs).

>>> hd = difflib.HtmlDiff()
>>> htmldiff = hd.make_file(codecs.open('file1', 'r', 'utf-16').readlines(), codecs.open('file2', 'r', 'utf-16').readlines())
>>> print >> codecs.open('diff.html', 'w', 'utf-16'), htmldiff
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top