GNU diff nie wydaje się być wystarczająco inteligentny, aby wykryć i obsługiwać pliki UTF-16, co mnie zaskakuje. Czy brakuje mi oczywistej opcji wiersza poleceń? Czy istnieje dobra alternatywa?Jak mogę diff utf-16 plików z GNU diff?
Odpowiedz
Z dokumentacji GNU diff:
Handling wielobajtową i różnej szerokości Postacie
diff, diff3 i sdiff traktują każdą linię wejścia jako ciąg unibyte znaków. W niektórych przypadkach może to być niezgodne z wieloma znakami wielobajtowymi . Na przykład, gdy poproszono o ignorowanie spacji , diff nie ignoruje poprawnie znaku wielobajtowego.
Ponadto, edycja Obecnie zakłada się, że każdy bajt jest szeroki jedną kolumnę, i w tym założenie jest błędnie niektórych lokalizacjach, na przykład, lokalizacyjnych, UTF-8 kodowania. Powoduje to problemy z opcją -y lub --side-by-side z diff.
Te problemy należy naprawić bez niepotrzebnego wpływu na wydajność środowisk w środowiskach unibajtowych .
IBM GNU/Linux Centrum Technologii internacjonalizacji Zespół zaproponował jakieś łaty do obsługi umiędzynarodowionego diff http://oss.software.ibm.com/developer/opensource/linux/patches/i18n/diffutils-2.7.2-i18n-0.1.patch.gz. Niestety, te poprawki są niekompletne i są w starszej wersji z diff, więc więcej pracy musi być wykonane w tym obszarze.
Nigdy nie zdawałem sobie z tego sprawy.
Wygląda Guiffy mogła do pracy czy nonfree, linia narzędzie non-komenda wykona pracę, wciąż szuka darmowe narzędzie wiersza poleceń:
Odzwierciedla długą tradycję narzędzi UNIX do traktowania znaków i bajtów jako równych, które dopiero niedawno zaczęły się nieco załamywać.Subversion jest również szeroko stosowanym narzędziem, które nie może traktować UTF-16 jako tekstu. – Joey
Można może zbudować coś w python z doskonałym chardet, a następnie przekonwertować pliki na UTF-8 i wysłać to do GNU diff?
Myślę, że gdybym miał zadać sobie tyle trudu, użyłbym Perla, ponieważ wiem o tym. :) – skiphoppy
vimdiff
działa całkiem nieźle do tego celu.
Znalazłem go podczas czytania this StackOverflow answer.
W języku Python można użyć polecenia difflib.HtmlDiff, aby utworzyć tabelę HTML, która pokazuje różnice między dwiema sekwencjami linii, i wydaje się działać dobrze z ciągami Unicode (pod warunkiem, że czytasz i zapisujesz je za pomocą odpowiednie kodeki).
>>> 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
- 1. Diff bez plików
- 2. Z porównania plików kdiff3, czy mogę wygenerować diff w ujednoliconym formacie diff?
- 3. git diff z połączonej --word-diff
- 4. howto make diff wyglądać jak svn diff?
- 5. Diff dla 3 plików binarnych
- 6. Jak uzyskać różnicę działającą jak git-diff?
- 7. Diff Algorithm
- 8. Perforce visual diff rozgałęzionego pliku (p4 diff2 z zewnętrznym diff)
- 9. Jak zrobić przeciwieństwo diff?
- 10. Automatyczne raportowanie diff
- 11. Diff algorytmy
- 12. diff zwraca cały plik identycznych plików
- 13. Skróty klawiaturowe dla P4 Diff/P4 Folder Diff
- 14. Git Diff Indent/Pretty Print/Beautify Before Diff
- 15. Zamień wersje plików w Xcode diff
- 16. nodegit dostać diff wszystkim wystawił plików
- 17. Java Pdf Biblioteka Diff
- 18. Aptana File Diff?
- 19. C# - Unified kreator łat/diff
- 20. Czy mogę uzyskać zgodne z łatką wyjście z git-diff?
- 21. implementacja diff w Javie
- 22. Graficzne diff dla darcs
- 23. Pandy "diff()" ze sznurkiem
- 24. git diff z filtrem autora
- 25. Dlaczego `git diff` nie wywołuje narzędzia zewnętrznego diff?
- 26. MySQL DATETIME DIFF zapytania
- 27. Jak grep the git diff?
- 28. git diff na datę?
- 29. Reading wyjście git diff
- 30. git stworzyć łatkę Diff
Nie wiem o UTF-16, ale powinien być w stanie obsłużyć karę UTF-8. – Zifre