Текстовый файл не открывается
Сканирование через
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