使用 Gedit 时,如何删除纯文本文件中的无效字符?

使用 Gedit 时,如何删除纯文本文件中的无效字符?

问题

Gedit 说我的一个使用 UTF-8 编码的文件包含无效字符,如果我继续使用,可能会被损坏。

细节

有问题的文件是我的某天/也许列表。我通常会在其中添加我想阅读的来源的链接,例如博客文章。我怀疑我添加的其中一个来源的链接包含无效字符,导致了我的问题。

我发现这里我需要运行 isutf8,然后使用 xxd 或 hexdump 扫描文件中的无效字符。运行 isutf8 毫无意义,因为如果这一页是正确的,它所做的只是告诉您文件是否包含无效字符。我读过一些关于 xxd 的手册页,以及关于 hexdump 的其他资料,但我什么都不懂。

我尝试过的方法

没什么。我担心编辑后文件可能会损坏或发生其他问题,所以我没有动它。此外,我的研究能力很差,所以我自己找不到解决方案。

答案1

如果您只使用 Gedit 编辑文件,原则上不会发生这种情况。在这种情况下,字符将自动转换为当前文本文件的字符代码。

如果由于某种原因引入了错误编码的字符,那么找出它们所在位置的一种方法是使用

grep -axv '.*' file.txt

(版权归这里)。该命令将仅显示包含无效字符的行。为了方便识别行,您可以添加-n显示行号的选项。

然后在 Gedit 中打开文件,继续跳过给出的警告消息。然后您可以编辑掉错误的字符。保存并关闭,然后重新打开文件。如果不再发出警告,则所有错误字符都已删除。

答案2

如果运气好的话 [如果这样的文件只用于在 gedit 或类似的文本查看器中读取,那么您将得到一个或多个无法识别的字符,这些字符不会有任何意义地显示]

如果只有最近一次的更改导致了问题,那么一切都非常简单。

对当前文件和 gedit 可能为您创建的自动备份进行多次备份。复制和备份文件的方法有很多,其中许多方法可以自动化,但目前最简单的方法是注意,如果文件位于另一个目录文件夹或设备中,Linux 将允许您拥有同名文件。因此,也许可以创建子文件夹,将它们命名为 usenow1 backup1 和 backup2,然后将文件复制到每个文件夹中。

注意 gedit 允许自动备份首选项 > 编辑器 > [x] 保存前创建备份文件。

如果已启用,则您已经自动保存了一个备份文件,该文件的名称和位置相同,但以横线 ~ 字符结尾。如果您有这样的文件,请同时制作多个副本。

现在,您可以放心地使用其中一个副本,因为您不会破坏任何尚未破坏的内容,并且您有备份。如果您在收到警告后关闭了系统,则以 swandash 结尾的文件是可以接受的。将其重命名为文件名,在 .txt 前添加 v02,并删除末尾的 ~。使用 gedit 打开该文件,您应该会得到未损坏文件的副本。

现在,如果您使用某些命令行工具或者可能更喜欢使用 GUI,请尝试 meld 或其他方法,然后您可以比较损坏的文件和您拥有的文件,并找出您想要保留的内容和想要删除的内容。

您可能有兴趣使用 iconv 检查您的文件https://www.debian.org/doc/manuals/debian-reference/ch11.en.html#_checking_file_to_be_utf_8_with_iconv

还要注意,如果您使用另存为,gedit 可能会提供其他编码选项,其中一个可能适合您新添加的信息。

相关内容