Kodierung korrigieren - geschweifter Apostroph erscheint als ‰ Ûª

556
user1310503

Ich habe eine Textdatei, in der alle ASCII-Zeichen korrekt angezeigt werden, andere jedoch nicht. Insbesondere gibt es dieses Wort:

don‰Ûªt 

In hex sind die Bytes 64 6f 6e 89 db aa 74. Offensichtlich ist es fast sicher, dass es ‰Ûªsich um einen geschweiften Apostroph handeln sollte, wahrscheinlich U + 02BC, U + 2019 oder U + 0092 . [ Zum Hinzufügen hinzugefügt: Basierend auf dem Kopieren des korrekten Apostroph aus einem PDF-Dokument, das den gleichen Text enthält, bin ich jetzt ziemlich sicher, dass es U + 2019 ist .]

Diese Webseite sagt

Wenn eine Sequenz von Bits (für einen Menschen) in keiner Kodierung einen Sinn ergibt, wurde das Dokument höchstwahrscheinlich irgendwann falsch konvertiert. ... Wenn ein Dokument falsch interpretiert und in eine andere Kodierung konvertiert wurde, ist es beschädigt. Der Versuch, es zu "reparieren", kann erfolgreich sein oder auch nicht, normalerweise nicht. Jedes manuelle Bit-Shifting oder andere Kodierungsvoodoo ist meistens das, Voodoo.

Aber ich sollte in der Lage sein, herauszufinden, was mit meiner Datei passiert ist, da ich die Bytes kenne und weiß, welchen Charakter sie bedeuten sollen. Kann mir jemand sagen, wie ich herausfinden kann, wie die Datei beschädigt wurde und wie man sie reparieren kann?

1

1 Antwort auf die Frage

2
RedGrittyBrick

Kann mir jemand sagen, wie man herausfindet, wie die Datei beschädigt wurde, ...

Ich kann nicht, aber vielleicht hast du Glück.

Bei einer verschlüsselten Konfiguration eines Rubik-Cubes ist es sehr einfach, eine Reihe von Bewegungen zu ermitteln, um ihn in den Ausgangszustand zu bringen. Es ist normalerweise unmöglich herauszufinden, mit welchen Zügen der verschlüsselte Zustand erreicht wurde - weil die Anzahl der möglichen Bewegungsabläufe enorm ist.

Dein Problem ist ähnlich. Zum Teil, weil Sie keine Hinweise auf Plattformen, Ländereinstellungen und Tools geben, die möglicherweise zum Erstellen dieser Textdatei verwendet wurden.

0x89 ist kein gültiges erstes Byte für eine 3-Byte-UTF8-Kodierung eines Zeichens. 0xDBAA ist arabisch leer. Welches ist natürlich unplausibel. Möglicherweise wurde UTF8 als 8-Bit-Codierung falsch interpretiert und dann als andere 8-Bit-Codierung gespeichert. Wenn sich die Datei in der Nähe von Japan befunden hat, könnten Sie Missbrauch von JIS, Shift-JIS und EUC in den Mix einbringen.

Es gibt vielleicht ein Dutzend plausible Unicode-Zeichen und wahrscheinlich eine größere Anzahl von plausiblen 8-Bit- und 16-Bit-Kodierungen. Das sind zu viele Permutationen, um es manuell zu versuchen. Wenn es wichtig genug wäre, würde ich vielleicht Code schreiben, um alle Permutationen des Startzeichens plus zwei Scramblings auszuprobieren und zu sehen, ob 0x89DBAA ankommt.

Statistisch gesehen würde ich davon ausgehen, dass das wahrscheinlichste Szenario etwas ist, aber nicht ganz anders als:

  1. Erstellen Sie eine UTF8-Textdatei ohne Stückliste (wie von Unicode-Konsortium empfohlen).
  2. Lesen Sie diese Datei mit MS-Windows Notepad in einem Gebietsschema "Windows-Latin-1". Notepad liest UTF8 falsch als CP-1252, zum Teil weil UTF-8 keine Byte-Order-Marke hat und viele Microsoft-Tools eine Byte-Order-Marke als Kodierungsindikator missbrauchen.
  3. Speichern Sie die Datei als "Unicode". Notepad verwendet die falsche Terminologie von Microsoft und übersetzt den CP-1252 in UTF-16-Little-Endian (mit BOM).

Aber das ist zu einfach (ich habe es nicht probiert).

Ich bin mir sicher, dass die Antwort im Nachhinein offensichtlich ist. Aber das ist jetzt ein kleiner Trost.

... und wie kann ich das beheben?

Da der einzige offengelegte Inhalt das englische Wort ist don't, können wir ableiten, dass die gesamten Daten 95% ASCII sind . Das macht es möglich, die manuelle Inspektion zu verwenden ...

  1. Erstellen Sie eine Liste aller unterschiedlichen Gobbledegook-Sequenzen und plausiblen Ersetzungen, beginnend mit 0x89dbaa-> '.

  2. Verwenden Sie ein byteorientiertes Werkzeug (z. B. sed), um diese Ersetzungen vorzunehmen.

  3. ???

  4. Profitieren!

Vielen Dank. Die Datei ist lang und fast alle Zeichen sind ASCII und werden korrekt angezeigt. Ich nehme an, es wurde unter Windows in Notepad geöffnet, aber es ist wahrscheinlicher, dass es unter Windows auf andere Art und Weise verarbeitet wurde, z. B. Öffnen und Speichern in Excel mit Standardeinstellungen oder falschen Einstellungen. Es wurde nicht allzu oft herumgereicht, daher bezweifle ich, dass es mehr als einmal falsch konvertiert wurde. Diese Annahmen würden das Problem viel einfacher machen als die Rubel-Würfel-Analogie, denke ich. Vielleicht werde ich versuchen, Code zu schreiben, wie Sie es vorschlagen ... user1310503 vor 6 Jahren 0