Jak diff UTF-16 soubory s GNU diff?

hlasů
17

GNU diff se nezdá být dostatečně rozpoznat a zvládnout UTF-16 souborů, což mě překvapuje chytrý. Jsem chybí možnost zřejmý příkazového řádku? Je tam dobrá alternativa?

Položena 22/04/2009 v 18:15
zdroj uživatelem
V jiných jazycích...                            


6 odpovědí

hlasů
11

vimdiff funguje docela dobře pro tento účel.

Zjistil jsem to, když četl tuto odpověď StackOverflow .

Odpovězeno 13/11/2009 v 12:32
zdroj uživatelem

hlasů
8

Z diff dokumentace GNU:

Manipulace Vícebajtové a měnící se šířkou znaky

diff, diff3 a sdiff léčit každý řádek vstupu jako řetězec unibyte postav. To může neodborně vícebajtové znaky v některých případech. Například, když žádal, aby ignorovat mezery, diff není správně ignorovat vícebytový mezeru.

Také rozdíl v současné době předpokládá, že každý bajt je jeden sloupec široký, a tento předpoklad je nesprávný v některých lokalitách, např, národní prostředí, které používají kódování UTF-8. To způsobuje problémy s -y nebo --side-by-side možnost diff.

Tyto problémy je třeba pevně bez nežádoucího vlivu na výkon utilit v unibyte prostředí.

IBM GNU / Linux Technology Center Internacionalizace Team navrhla některé skvrny na podporu zmezinárodněný diff http://oss.software.ibm.com/developer/opensource/linux/patches/i18n/diffutils-2.7.2-i18n-0.1.patch .gz . Bohužel, tyto opravy jsou neúplné a jsou starší verzi diff, takže potřebuje více práce je třeba udělat v této oblasti.

Nikdy jsem si uvědomil, že sám.

Vypadá to, že Guiffy by se k práci, pokud nonfree, line nástroj, non-příkaz bude dělat práci, stále hledá freeware nástroj příkazového řádku:

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

Odpovězeno 22/04/2009 v 18:24
zdroj uživatelem

hlasů
1

Malforms náplasti, když se používají diakritická znaménka nebo speciální znaky:

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

Správně zpracovává diakritiku a speciální znaky bez ohledu na to, zda ve srovnání soubory / dirs jsou ve složce git.

 git --version
 git version 2.17.1
 git diff --no-index old_foo new_foo > foo.patch
Odpovězeno 02/02/2019 v 18:46
zdroj uživatelem

hlasů
1

Instalace ripgrepnástroj , který podporuje UTF-16, pak spustit:

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

ripgrepPodporuje vyhledávání souborů v jiných oblastech než UTF-8 kódování textu, jako je například UTF-16, Latin-1, GBK, EUC-JP, Shift_JIS a další. (Je k dispozici nějaká podpora pro automatickou detekci UTF-16. Jiné kódování textu musí být výslovně zadán s -E/ --encoding flag.)

Odpovězeno 17/01/2019 v 13:08
zdroj uživatelem

hlasů
0

V Pythonu můžete použít difflib.HtmlDiff vytvořit HTML tabulku, která ukazuje rozdíly mezi dvěma sekvencemi linií, a zdá se, že funguje s řetězci Unicode (za předpokladu, samozřejmě, budete číst a psát je s vhodnými kodeky).

>>> 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
Odpovězeno 10/02/2012 v 20:47
zdroj uživatelem

hlasů
0

Dalo by se snad postavit něco v Pythonu s vynikajícím chardet, pak převést soubory na UTF-8 a poslat to GNU diff?

http://chardet.feedparser.org/

Odpovězeno 30/04/2009 v 08:07
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more