2009-04-22 14 views
17

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?

+0

Non so UTF-16, ma dovrebbe essere in grado di gestire bene UTF-8. – Zifre

risposta

8

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:

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

+0

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

0

Si potrebbe forse costruire qualcosa in python con l'eccellente chardet, quindi convertire i file in UTF-8 e inviarli a GNU diff?

http://chardet.feedparser.org/

+0

Penso che se dovessi andare a tanto, userò Perl, dal momento che lo so. :) – skiphoppy

0

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 
Problemi correlati