GNU diff не кажется достаточно умным, чтобы обнаруживать и обрабатывать файлы UTF-16, что меня удивляет. У меня отсутствует очевидная опция командной строки? Есть ли хорошая альтернатива?Как удалить файлы utf-16 с помощью GNU diff?
ответ
С дифф документации GNU:
Обработка мультибайтового и варьируя-Ширин Символы
дифференциалы, diff3 и SDiff лечат каждую строку ввода в виде строки однобайтном символов. В некоторых случаях это может привести к ошибкам многобайтовых символов. Например, когда просят игнорировать пробелы , diff неправильно игнорирует символ многобайтового пробела.
Кроме того, в настоящее время Diff предполагает, что каждый байт один столбец в ширину, и это предположение неверно в некоторых районов, например, Locales, которые используют UTF-8 кодирования. Это вызывает проблемы с опцией -y или -side-by-side diff.
Эти проблемы должны быть исправлены без чрезмерного влияния на производительность утилит в однобайтном средах.
The IBM GNU/Linux Technology Center Интернационализация Команды предложил некоторые патчи для поддержки интернационализированного дифа http://oss.software.ibm.com/developer/opensource/linux/patches/i18n/diffutils-2.7.2-i18n-0.1.patch.gz. К сожалению, эти исправления не являются неполными и относятся к более ранней версии отличия, поэтому необходимо провести больше работы в этой области.
Я никогда не осознавал этого сам.
Похоже Guiffy может на работу, если несвободный, не инструмент командной строки будет делать эту работу, по-прежнему ищет бесплатный инструмент командной строки:
Отражает давнюю традицию инструментов UNIX для обработки символов и байтов как равных, которые только недавно начали немного распадаться.Subversion также является широко используемым инструментом, который не может рассматривать UTF-16 как текст. – Joey
Вы могли бы, возможно, что-то построить в python с превосходным набором, затем конвертировать ваши файлы в UTF-8 и отправить это в GNU diff?
Думаю, что если я собираюсь пойти на эту проблему, я бы использовал Perl, так как знаю это. :) – skiphoppy
vimdiff
работает довольно хорошо для этой цели.
Я нашел его при чтении this StackOverflow answer.
В Python вы можете использовать difflib.HtmlDiff для создания таблицы HTML, которая показывает различия между двумя последовательностями строк, и кажется, что она отлично работает с строками Unicode (при условии, конечно, что вы читаете и записываете их с помощью соответствующие кодеки).
>>> 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
Я не знаю о UTF-16, но он должен иметь возможность обрабатывать UTF-8. – Zifre