Текстовый файл не открывается

Сканирование через

sudo date >> clam &&
    clamscan -r  -i --detect-pua --remove /home >> clam &&
    date >> clam

Возвращает файл, который не открывается

Сообщение об ошибке:

Could not open the file /home/alaa/clam.
pluma has not been able to detect the character encoding.
Please check that you are not trying to open a binary file.
Select a character encoding from the menu and try again.

Выход из uname -a:

4.15.0-39-generic #42~16.04.1-Ubuntu SMP Wed Oct 24 17:05:15 UTC 2018 i686 athlon i686 GNU/Linux

текстовый файл

2 ответа

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


Сначала я скачал файл по твоей ссылке, потом побежал file clamкоторый сказал clam: data, так что это означает, что он содержит байты / символы, которые не должны быть в текстовом файле UTF-8, в противном случае он сказал бы UTF-8 Unicode text,

Затем я написал этот конвейер, чтобы найти непечатаемые символы:

< clam python3 -c 'import sys; [print(repr(line.rstrip("\n"))) for line in sys.stdin]' |
    grep -n '\\'

Выход (где \x00 представляет нулевой байт):

542:'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00ن يول  2 11:58:51 EET 2018'

Пояснение:

  • < clam - Читать clam через стандартный ввод
  • python3 - Python 3 изначально поддерживает Unicode, поэтому это хороший инструмент для работы.
  • [... for line in sys.stdin] - Итерировать по каждой строке стандартного ввода.
  • print(repr(line.rstrip("\n"))) - Распечатайте представление каждой строки, исключая завершающий символ новой строки. Непечатные символы будут представлены в виде обратной косой черты.
  • grep -n '\\' - Печать строк, содержащих обратную косую черту плюс номер строки.

Обратите внимание, что это быстрый и грязный способ сделать это.


Чтобы это исправить, просто удалите нулевые байты. tr удобно для этого:

tr -d '\0' < clam > clam.txt

Затем подтвердите, что выходной файл хорош с file clam.txt, Это говорит clam.txt: UTF-8 Unicode textтак что да, это хорошо.

Вы также можете сделать это более безопасно:ascii2uni clam > clam.txt

Другие вопросы по тегам