Сброс текстовых файлов - PullRequest
       13

Сброс текстовых файлов

0 голосов
/ 13 октября 2010

Я пишу сценарий оболочки, который создаст текстовый (то есть диффундирующий) дамп архива.

Я хотел бы определить, можно ли печатать каждый файл в некотором заданном наборе символов, и если он пригоден для печати, я бы хотел преобразовать в этот набор символов из любого, в котором он находится, если это возможно, и сделать его содержимое частью дампа.

Я подумал об использовании утилиты file, но, похоже, нет никакого способа сказать ей просто напечатать кодировку символов или data. Например:

$ file -e soft -e tokens -e tar -e apptype -e cdf -e compress -e elf -e tar config.sub
config.sub: Lisp/Scheme program text

config.sub - это один из файлов, распространяемых с исходным кодом file.

Я также немного опасаюсь разбирать его довольно непредсказуемый вывод.

Я бы хотел свести к минимуму зависимости для этого скрипта. Я уже использую Perl, но предпочел бы не полагаться на какие-либо пакеты Perl. Предположительно iconv будет лучшим способом сделать преобразование, и я не против сделать это зависимостью.

С другой стороны, может быть, такая утилита, как мой зарождающийся скрипт, уже доступна?

обновление : я закончил писать это на Python. Его можно найти в его github repo или в PyPI . Текущая версия на самом деле не выполняет то, что я упомянул в этом вопросе: это оказалось слишком трудоемким и недостаточно необходимым для реализации.

Впрочем, он может перейти в более позднюю редакцию; если это так, я, скорее всего, в конечном итоге буду использовать некоторую комбинацию быстрого сканирования для двоичного обнаружения (как упомянуто в одной из цепочек комментариев) и использование модуля chardet, как упомянуто Заком. Другим вариантом может быть использование оболочки Python для утилиты file C, хотя я не уверен, насколько это переносимо.

Ответы [ 2 ]

2 голосов
/ 13 октября 2010

Вы пробовали варианты пантомимы, которые дают более последовательный вывод?

file --mime-encoding --mime-type -b somefile
1 голос
/ 13 октября 2010

Универсальный детектор кодирования делает эту чертовски хорошую работу - увы, сделать это невозможно.И это требует Python.

...