Sorry, but the text is unrecoverable at this point.
The problem is, not all character sets have the same range of characters.
When you switched between character sets, there is an attempt by the system to retain the characters in some way. But since not all character sets have all characters, characters were lost in this process so these files are permanently garbled.
In your example, if you went from Cyrillic (which should be UTF-8) to ANSI (aka: Windows-1252) and then to Windows-1251 (an older, Cyrillic script) each conversion lost data.
Sorry, but a backup of some kind is your only hope.
FWIW, this page — “Where Did These Funny Characters Come From?” — has an excellent explanation of how this happens and what those question marks (?
) mean:
A byte is 8 bits, and the value can conveniently be represented in hexadecimal (usually abbreviated to "hex") or in decimal or, less conveniently, in octal or binary.
For example the character "A" in is represented in a single byte like this:
A |
|
Binary |
01000001 |
Hex |
41 |
Decimal |
65 |
Octal |
101 |
Unicode Code Point |
U+0041 |
The character "A" is the same in UTF-8, ASCII, ISO/IEC 8859 and Windows 12xx, all our usual sources. So in this case we don't have to worry about any incompatibility because there isn't any.
If we look at the Euro symbol (€) it's a completely different story:
€ - Euro currency symbol
Character Encoding |
UTF-8 (3-byte sequence) |
ISO/IEC 8859-15 |
Windows-1252 |
Binary |
11100010 10000010 10101100 |
10100100 |
10000000 |
Hex |
e2 82 ac |
a4 |
80 |
Decimal |
225 130 172 |
164 |
128 |
Octal |
342 202 254 |
244 |
200 |
Unicode Code Point |
U+20ac |
|
|
Our commonly-used encoding systems all represent the Euro symbol differently. If we copy the bytes from a file encoded in ISO-8859-15 to a database running in Windows-1252, our Euro symbol (hex a4) will not look like a Euro symbol any more. In Windows-1252 hex a4 is "¤". Going from Windows-1252 to ISO-8859-15 we would get a question mark or a "◼" because in ISO-8859-15 hex 80 is undefined. 7-bit ASCII and EBCDIC do not have any way to represent a Euro symbol. These encoding systems were defined before the Euro existed, so that is not surprising.
While we could get away with using one consistent 8-bit code then everything was very simple, but we can't do that in the real world any more, so we need something better. UTF-8 is that something better, so we'll explain a bit about how that works.