在 Notepad++ 中多次更改编码后,如何恢复我的文本文件?

在 Notepad++ 中多次更改编码后,如何恢复我的文本文件?

我的文本文件格式有问题。我猜最初是 Windows-1252。然后我尝试使用 Notepad++ 将文件重新格式化为另一种编码格式,重复了几次,结果一团糟???A??a?s??A§???A??a?s??A ???A??a?s??Aµ???A??a?s??A®???A??a?s??A¤????????????。我不记得我执行的操作的实际顺序。我唯一确定的是,我在 ANSI、UTF-8 和 Windows-1251 之间切换。这些都没能让我的文本恢复到之前的正确西里尔格式。

那么,有没有办法找回我在这个文件中的信息?txt 文件是否包含所有信息,我只需要弄清楚我需要什么编码格式,或者它被替换了,信息永远丢失了?最初,我在文件中有一些西里尔文文本。

答案1

抱歉,但目前文本无法恢复。

问题是,并非所有字符集都具有相同的字符范围。

当您在字符集之间切换时,系统会尝试以某种方式保留字符。但由于并非所有字符集都包含所有字符,因此在此过程中字符会丢失,因此这些文件将永久乱码。

在您的示例中,如果您从西里尔文(应该是UTF-8)转换为 ANSI(又名:Windows-1252)然后Windows-1251(一种较旧的西里尔文字)每次转换都会丢失数据。

抱歉,但某种备份是您唯一的希望。

FWIW,这一页— “这些有趣的人物是从哪里来的?” — 对这种情况发生的原因以及这些问号(?)的含义进行了出色的解释:

一个字节是 8 位,其值可以方便地以十六进制(通常缩写为“hex”)或十进制表示,或者不太方便地以八进制或二进制表示。

例如,中的字符“A”用单个字节表示如下:

A
二进制 01000001
十六进制 41
十进制 65
八进制 101
Unicode 代码点 U+0041

字符“A”在 UTF-8、ASCII、ISO/IEC 8859 和 Windows 12xx 中都是相同的,这些都是我们常用的来源。因此在这种情况下,我们不必担心任何不兼容问题,因为根本不存在不兼容问题。

如果我们看一下欧元符号(€),那就是完全不同的故事:

€——欧元货币符号

字符编码 UTF-8(3字节序列) ISO/IEC 8859-15 Windows-1252
二进制 11100010 10000010 10101100 10100100 10000000
十六进制 e2 82 交流电 a4 80
十进制 225130172 164 128
八进制 342202254 244 200
Unicode 代码点 U+20ac

我们常用的编码系统都以不同的方式表示欧元符号。如果我们将 ISO-8859-15 编码文件中的字节复制到在 Windows-1252 中运行的数据库,我们的欧元符号(十六进制 a4)将不再像欧元符号。在 Windows-1252 中,十六进制 a4 为“¤”。从 Windows-1252 转换为 ISO-8859-15 时,我们会得到一个问号或“◼”,因为在 ISO-8859-15 中十六进制 80 未定义。7 位 ASCII 和 EBCDIC 无法表示欧元符号。这些编码系统是在欧元出现之前定义的,因此这并不奇怪。

虽然我们可以使用一个一致的 8 位代码,这样一切都会变得非常简单,但在现实世界中我们无法再这样做了,所以我们需要更好的方法。UTF-8 就是更好的方法,所以我们将稍微解释一下它的工作原理。

相关内容