文本文件无法打开

文本文件无法打开

扫描方式

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

文本文件

答案1

第 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]- 遍历 stdin 的每一行。
  • print(repr(line.rstrip("\n")))- 打印每行的表示,不包括尾随的换行符。非打印字符将用反斜杠序列表示。
  • grep -n '\\'- 打印包含反斜杠和行号的行。

请注意,这是一种快速但又肮脏的方法。


要修复此问题,只需删除空字节即可。tr这很方便:

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

然后用 确认输出文件没有问题file clam.txt。它显示clam.txt: UTF-8 Unicode text,所以是的,文件没有问题。

答案2

您还可以更安全地进行此操作:ascii2uni clam > clam.txt

相关内容