GNU diff non sembra abbastanza intelligente da rilevare e gestire i file UTF-16, cosa che mi sorprende. Mi manca un'ovvia opzione da riga di comando? C'è una buona alternativa?Come faccio a diff-16 i file con GNU diff?
risposta
Dalla documentazione diff di GNU:
Handling Multibyte e variando-Width Personaggi
diff, diff3 e sdiff trattare ogni linea dell'ingresso come una stringa di caratteri unibyte . In alcuni casi questo può maneggiare in modo errato i caratteri multibyte . Ad esempio, quando viene richiesto di ignorare gli spazi , diff non ignora correttamente un carattere di spazio multibyte.
Inoltre, diff attualmente presuppone che ogni byte è una colonna di larghezza, e questo presupposto non è corretto in alcuni locali, ad esempio, locali che utilizzano UTF-8 codifica. Ciò causa problemi con l'opzione -y o -side-by-side di diff.
Questi problemi devono essere fissati senza penalizzare inutilmente il prestazioni dei programmi di utilità in ambienti unibyte.
IBM GNU/Linux Technology Center Internazionalizzazione della squadra ha proposto alcune patch per supportare internazionalizzato diff http://oss.software.ibm.com/developer/opensource/linux/patches/i18n/diffutils-2.7.2-i18n-0.1.patch.gz. Purtroppo, queste patch sono incomplete e si riferiscono a una versione precedente di , quindi è necessario ulteriore lavoro in questa area.
Non me ne sono mai reso conto.
Sembra Guiffy potrebbe al lavoro, se uno non libero, strumento a riga non di comando farà il lavoro, ancora alla ricerca di un freeware strumento da riga di comando:
Riflette la lunga tradizione degli strumenti UNIX per trattare personaggi e byte come se solo recentemente cominciassero a scemare un po '.Subversion è anche uno strumento ampiamente utilizzato che non può trattare UTF-16 come testo. – Joey
Si potrebbe forse costruire qualcosa in python con l'eccellente chardet, quindi convertire i file in UTF-8 e inviarli a GNU diff?
Penso che se dovessi andare a tanto, userò Perl, dal momento che lo so. :) – skiphoppy
vimdiff
lavori abbastanza bene per questo scopo.
L'ho trovato mentre leggevo this StackOverflow answer.
In Python, è possibile utilizzare difflib.HtmlDiff per creare una tabella HTML che mostra le differenze tra due sequenze di righe e sembra funzionare correttamente con le stringhe Unicode (a condizione, ovviamente, di leggerle e scriverle con codec appropriati).
>>> 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. Alternative a GNU diff?
- 2. Come diff solo i file sorgente?
- 3. Come faccio a fare l'equivalente di "git diff --name-status" con jgit?
- 4. diff'ing diff con diff?
- 5. git diff --word-diff con file on line
- 6. Trova Unix con GNU Make per aggiornare automaticamente i file
- 7. Mercurial: elenca i file "hg diff"
- 8. Come faccio a trovare "i" con Turkish i in java?
- 9. Come faccio a lanciare i file in C#
- 10. Come faccio a leggere i contenuti FILE in QML?
- 11. Come faccio a elencare solo i file che verrebbero inseriti?
- 12. diff git con combinato --word-diff
- 13. Come faccio a leggere/scrivere file compressi con gzip?
- 14. Come faccio a.ignore i file con Git GUI?
- 15. Come abilitare i percorsi dei file jolly per git diff?
- 16. utilizzando comm a diff due file
- 17. Come faccio a ottenere GNU make per emettere i comandi che esegue per costruire i suoi obiettivi
- 18. Come pacchettizzare file di dati con autoconf e GNU di GNU
- 19. Utilizzando Python, come faccio a leggere/scrivere i dati in memoria come farei con un file?
- 20. Come rendere git diff usare gitx --diff su OS X
- 21. Come faccio a comprimere i file in Java e non includere i percorsi dei file
- 22. Git-diff a HTML
- 23. come utilizzare Tempo GNU con pipeline
- 24. Come faccio a leggere/scrivere file binari?
- 25. Come faccio a tessere un progetto a più file?
- 26. Come faccio a distinguere tra file "binari" e "testo"?
- 27. Diff senza file
- 28. Git diff - come uscire dal listato diff
- 29. Come diff elenco di file personalizzato con WinMerge
- 30. Perchè svn diff a volte copia i file di lavoro in un file temporaneo?
Non so UTF-16, ma dovrebbe essere in grado di gestire bene UTF-8. – Zifre