gpt4 book ai didi

linux - 如何解决 Linux 中损坏的文本文件?

转载 作者:太空宇宙 更新时间:2023-11-04 10:59:38 26 4
gpt4 key购买 nike

我的一个 UTF-8 编码的 XML 文件发生了一些奇怪的事情。结果,我的 Ubuntu 14.04 桌面认为它是一个二进制文件,任何编辑器都将其显示为充满“奇怪”字符。这是我的案例:

k6ps@laptop520:~/Allalaadimised/File_problem$ ll
kokku 308
drwxrwxr-x 2 k6ps k6ps 4096 dets 15 11:02 ./
drwxr-xr-x 5 k6ps k6ps 20480 dets 15 10:58 ../
-rw-r--r-- 1 k6ps k6ps 134587 dets 15 10:58 bad_file.xml
-rw-r--r-- 1 k6ps k6ps 131930 dets 15 10:58 good_file.xml
k6ps@laptop520:~/Allalaadimised/File_problem$ file -bi good_file.xml
application/xml; charset=utf-8
k6ps@laptop520:~/Allalaadimised/File_problem$ file -bi bad_file.xml
application/octet-stream; charset=binary
k6ps@laptop520:~/Allalaadimised/File_problem$ head -n 3 good_file.xml
<?xml version="1.0" encoding="UTF-8"?>
<logbook>
<threadset name="First">
k6ps@laptop520:~/Allalaadimised/File_problem$ head -n 3 bad_file.xml
|I��+ˮ���|+��l��]֊ՙ�z�")��l��]֊ՙ�z�")��l��]֊ՙ�z�")��l��]֊ՙ�z�")��l��]֊ՙ�z�" )��l��]֊ՙ�z�")��l��]֊ՙ�z�")��l��]֊ՙ�z�")��l��]֊ՙ�z�")��l��]֊ՙ�z�")��l��]֊ՙ�z�")��l��]֊ՙ�z�")��l��]֊ՙ�z�")��l��]֊ՙ�z�")��l��]֊ՙ�z�")��l��]֊ՙ�z�")��l��]֊ՙ�z�")��l��]֊ՙ�z�")��l��]֊ՙ�z�")��l��]֊ՙ�z�")��l��]֊ՙ�z�")��l��]֊ՙ�z�")��l��]֊ՙ�z�")��l��]֊ՙ�z�")��l��]֊ՙ�z�")��l��]֊ՙ�z�")��l��]֊ՙ�z�")��l��

.. 还有很多这样的角色。当我在 vi 编辑器或 Scite 中打开文件时,我得到很多这样的字符:

|I^[ ß+Ë®ýþö|+ÆÜ^Pl<8c>ò]Ö<8a>Õ<99><98>z»"^\)<9d>Ãl<8c>ò]Ö<8a>Õ<99><98>z»"^
\)<9d>Ãl<8c>ò]Ö<8a>Õ<99><98>z»"^\)<9d>Ãl<8c>ò]Ö<8a>Õ<99><98>z»"^\)<9d>Ãl<8c>ò]Ö<8a>Õ<99>
<98>z»"^\)<9d>Ãl<8c>ò]Ö<8a>Õ<99><98>z»"^\)<9d>Ãl<8c>ò]Ö<8a>Õ<99><98>z»"^<98>z»"^\)<9d

...在底部它说:

"bad_file.xml" [Incomplete last line][converted] 138 lines, 214920 characters

十六进制转储输出:

k6ps@laptop520:~/Allalaadimised/File_problem$ hexdump -C bad_file.xml | head -n 15
00000000 7c 49 1b a0 df 2b cb ae fd fe f6 7c 2b c6 dc 10 ||I...+.....|+...|
00000010 6c 8c f2 5d d6 8a d5 99 98 7a bb 22 1c 29 9d c3 |l..].....z.".)..|
*
00001000 5a ea 54 45 9b f8 9e ce 16 35 89 bd 8f 08 cb 82 |Z.TE.....5......|
00001010 6c 8c f2 5d d6 8a d5 99 98 7a bb 22 1c 29 9d c3 |l..].....z.".)..|
*
00002000 29 b8 f0 21 4a ea 00 19 28 46 53 c5 d1 73 f5 a9 |)..!J...(FS..s..|
00002010 6c 8c f2 5d d6 8a d5 99 98 7a bb 22 1c 29 9d c3 |l..].....z.".)..|
*
00003000 5c 56 80 41 f9 ef 98 3c e3 7e 7c ee 3a 20 94 82 |\V.A...<.~|.: ..|
00003010 6c 8c f2 5d d6 8a d5 99 98 7a bb 22 1c 29 9d c3 |l..].....z.".)..|
*
00004000 ad cc 1c 5f 40 22 8b f6 9b bb aa ea 45 de 21 ee |..._@"......E.!.|
00004010 6c 8c f2 5d d6 8a d5 99 98 7a bb 22 1c 29 9d c3 |l..].....z.".)..|
*

我试过用各种编辑器打开文件并更改编码,用 iconv 转换,但到目前为止没有成功。不幸的是,我对系统级问题非常缺乏经验,所以有人可以给我一些建议,我可以尝试从该文件中恢复文本吗?

k6ps

最佳答案

去除任何不可打印字符的方法是

tr -d -c '\11\12\15\40-\176' < bad_file.xml > cleanup.xml

这将创建一个名为 cleanup.xml 的文件,其中所有不是可打印 ASCII 字符的内容都从文件中删除。然后您应该能够更轻松地检查它,看看它是否包含任何有用的文本。

这将删除 (-d) 任何不在指定集合 (-c) 中的内容。该集合包含\11\12\15,分别是制表符、LF和CR,然后是\40的所有内容\176,都是可打印的字符。

但就您而言,恐怕答案是放弃。在您的 hexdump 输出中, * 表示重复的行;所以你有一行看起来像垃圾,后面跟着这一行

6c 8c f2 5d d6 8a d5 99  98 7a bb 22 1c 29 9d c3  |l..].....z.".)..|

重复了很多次,然后又是同样的模式。你的文件不见了。对此感到抱歉。

实际上这可能不完全正确:文件的旧副本可能未损坏地躺在某处,或者如果您使用的是日志文件系统,您可能能够恢复文件,但这些是不同的问题,并且最好在 Super User 询问。

(我不会提到备份,因为它可能会很烦人,而且不会取得太大的成就......)

关于linux - 如何解决 Linux 中损坏的文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27480737/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com