2016-04-04 8 views
0

Also, ich habe dieses Stück Code:Schreiben rohes Bytes in eine Datei in Python3 führt zu unerwartetem Ausgang

f = open("crash.txt", "w") 
junk = ("\xCC" * 1028) 
f.write(junk) 
f.close() 

Wenn ich laufe dies auf Windows (3.5.1), erhalte ich eine Datei mit wiederholten " CC "s als Hexadezimalzeichen. Das ist wie erwartet.

Allerdings unter Linux (Python 3.4.2), wiederhole ich "C38C" s als Hex-Zeichen.

Ich verstehe nicht die Ausgabe unter Linux. Warum passiert das und wie repariere ich es?

+0

Was meinst du mit c38c als Hex? Meinst du '\ xc3 \ x8c'? – Reti43

+0

@ Reti43 Ja. Wenn ich mir den Inhalt der Datei in einem Hexeditor ansehe. – user1720897

Antwort

1

Sie schreiben keine rohen Bytes. Standardmäßig verwendet Python 3 Unicode-Zeichenfolgen, und diese Zeichenfolgen müssen codiert werden, um sie in eine Datei zu schreiben. Außerdem verwendet open() standardmäßig den Textmodus und die Codierung, die zum Codieren von Text verwendet wird, lautet locale.getpreferredencoding(). Auf US-Windows ist das cp1252, aber unter Linux ist es normalerweise utf8.

b'\xc3\x8c' ist '\xcc' kodiert in utf8.

b'\xcc' ist '\xcc' kodiert in cp1252.

Öffnen Sie die Datei im Binärmodus, und schreiben Sie Bytezeichenfolgen anstelle von Unicode, um "rohe" Bytes zu schreiben.

with open("crash.txt", "wb") as f: 
    junk = b"\xCC" * 1028 
    f.write(junk) 
+0

Ausgezeichnet. Danke, dass du das geklärt hast! – user1720897

+0

@Mark Tolonen Ich versuche, eine Byte-Typ-Variable in eine Datei zu schreiben. irgendein Vorschlag? –

Verwandte Themen