2017-01-25 4 views
0

Ein Freund von mir hat einfache Poesie mit C fprintf Funktion geschrieben. Es wurde mit der Option 'wb' geschrieben, so dass die generierte Datei binär ist. Ich würde gerne Python verwenden, um die Poesie im Klartext zu zeigen.Lesen einer Binärdatei als einfachen Text mit Python

Was ich zur Zeit immer gibt viele Strings wie folgt aus:

Der Code ich verwende:

with open("read-me-if-you-can.bin", "rb") as f: 
     print f.read() 

f.close() 
+0

Ihre ursprüngliche Frage war etwas unklar. Ich habe versucht, es zu klären, aber wenn ich die Bedeutung versehentlich geändert habe, kannst du es zurückrollen. – Tagc

+0

Einfach als 'Bytearray' einlesen und dann in eine Zeichenkette umwandeln. –

+0

Können Sie mir ein Beispiel geben? –

Antwort

1

Die Sache ist, wenn sie mit Text zu tun Wenn Sie in eine Datei geschrieben haben, müssen Sie die beim Schreiben der Datei verwendete Zeichencodierung kennen (oder richtig erraten). Wenn das Programm, das die Datei liest, die falsche Kodierung hier annimmt, werden Sie mit seltsamen Zeichen im Text enden, wenn Sie Glück haben und mit absolutem Müll, wenn Sie Pech haben.

Versuchen Sie nicht zu raten, versuchen Sie es zu wissen: Sie müssen Ihren Freund fragen, in welcher Zeichencodierung er oder sie den Gedichtentext in die Datei geschrieben hat. Sie müssen dann die Datei in Python öffnen, die diese Zeichencodierung angibt. Sagen wir seine/ihre Antwort „UTF-16-LE“ (für zuliebe Beispiel), schreiben Sie dann:

with open("poetry.bin", encoding="utf-16-le") as f: 
    print(f.read()) 

Es scheint, dass Sie auf Python sind 2 immer noch, obwohl, so dass Sie schreiben:

import io 
with io.open("poetry.bin", encoding="utf-16-le") as f: 
    print f.read() 

Sie könnten zunächst UTF-8 ausprobieren, das ist eine häufig verwendete Codierung.

+0

Ich habe sowohl UTF-8 als auch ASCII benutzt und es hat nicht funktioniert ... wie kann ich die verwendete Kodierung bekommen? Fragt mein Freund? Verwenden eines UNIX-Befehls? –

+0

versuche '' datei poetry.bin'' in deiner Shell, wenn es dir nicht sagt, was du wissen musst, frag deinen Freund. Alternativ öffnen Sie die Datei in einem guten Texteditor. Es sollte Ihnen irgendwo die Kodierung der Datei mitteilen. –

+0

read-me-if-you-can.bin: ISO-8859-Text, mit sehr langen Zeilen, ohne Abschlusszeichen. Wenn ich jedoch "ISO-8859" in die Codiervariable "LookupError: unknown encoding" einfüge: ISO-8859 –