Python 3 ist unicode utf-8-Datei
Ich versuche zu analysieren, die durch eine log-Datei, aber das format der Datei ist immer in unicode. Meine übliche Prozess möchte ich gerne automatisieren:
- Ziehe ich die Datei in notepad
- Speichern unter...
- ändern der Codierung von
unicode
zuUTF-8
- Dann führen Sie python-Programm auf Sie
So, in diesem Prozess möchte ich gerne automatisieren in Python 3.4. Ziemlich viel hat sich geändert, die Datei zu UTF-8
oder so etwas wie open(filename,'r',encoding='utf-8')
obwohl diese exakte Linie warf mich diese Fehlermeldung, wenn ich versuchte zu rufen, Lesen() auf:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
Wäre es EXTREM hilfreich, wenn ich könnte konvertieren die gesamte Datei (wie in meinem ersten Szenario), oder öffnen Sie einfach das ganze in UTF-8, die Art und Weise habe ich nicht auf die str.encode (oder so ähnlich) jedes mal, wenn ich analysieren einer Zeichenfolge.
Jemand mitgemacht und weiß, welche Methode ich verwenden soll und wie es zu tun?
EDIT:
In der Python ist3 repr, ich habe
>>> f = open('file.txt','r')
>>> f
(_io.TextIOWrapper name='file.txt' mode='r' encoding='cp1252')
So, jetzt mein python-code in mein Programm öffnet die Datei mit open('file.txt','r',encoding='cp1252')
. Ich arbeite mit einer Menge von regex suchen über diese Datei, obwohl, und es ist nicht Kommissionierung es bis (ich glaube es, weil es nicht utf-8). So muss ich nur noch herausfinden, wie die Schalter von cp1252 auf UTF-8. Danke @Mark Lösegeld
- Sie müssen herausfinden, die Codierung, die der original-Datei, und verwenden, statt
utf-8
wenn Sie die Datei öffnen. - Wie mache ich das? Denn wenn ich auf "speichern" klicken, wie im Editor, es sagte nur unicode
- Okay, ich hab schon fast got it! In der Python ist3 repr ich herausgefunden, dass die Codierung der Datei ist cp1252. Jetzt denke ich, ich muss nur konvertieren zu utf-8 direkt nach dem öffnen der Datei
- Python nicht analysieren der Datei, um herauszufinden, welche Codierung er verwenden soll, es nimmt halt den Standard für Ihre Windows-Umgebung. Notizblock auf der anderen Seite hat versuchen zu analysieren, die Datei. Wenn er sagt, Unicode, ist es wahrscheinlich
utf-16le
- versuchen. - wie wandle ich das auf utf-8?
- Warum brauchen Sie, um zu konvertieren? Wenn Sie die Datei öffnen mit
encoding='utf-16'
sollten Sie die richtige Unicode-strings Lesen Sie die Datei, und das Programm wird "einfach funktionieren". - Das ist es nicht. Ich Schreibe, was ich lese auf eine andere Datei jedes mal und es ist Druck-Zeichen, die Aussehen wie Müll-code. Ich kann auch nicht drucken Sie es. Es sagt UnicodeEncodeError
- Sie müssen auch verwenden
encoding=...
auf die Datei, die Sie schreiben. Sie brauchen nicht die gleichen zu sein, und es klingt von dem, was Sie gesagt haben, dass, sollte die Ausgabe in utf-8. Erwarte nicht, dass Windows in der Lage sein zu öffnen, einen utf-8-Datei und Sinn machen, obwohl es, das ist nicht seine native Zeichensatz.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was notepad ist der Auffassung
Unicode
istutf16
zu Python. Windows - "Unicode" - Dateien beginnen mit einem byte order mark (BOM) vonFF FE
, die angibt, little-endian UTF-16. Dies ist, warum Sie erhalten Folgendes, wenn Sieutf8
decodieren der Datei:Konvertieren zu UTF-8, den Sie verwenden könnten:
Beachten Sie, dass viele Windows-Editoren wie eine UTF-8-Signatur am Anfang der Datei ein, oder übernehmen kann
ANSI
statt.ANSI
ist wirklich dem lokalen Gebietsschema. Über UNS Windows ist escp1252
, aber es ändert sich für die anderen lokalisierten builds. Wenn Sie öffnenutf8.txt
und es sieht immer noch verzerrt, verwenden Sieencoding='utf-8-sig'
beim schreiben statt.