Angenommen, ich lese eine Datei mit 3 durch Komma getrennten Zahlen. Die Datei wurde mit einer unbekannten Kodierung gespeichert, bisher habe ich es mit ANSI und UTF-8 zu tun. Wenn die Datei in UTF-8 war und es hatte 1 Zeile mit Werten 115,113,12 dann:Umgang mit UTF-8-Nummern in Python
with open(file) as f:
a,b,c=map(int,f.readline().split(','))
würde dies werfen:
invalid literal for int() with base 10: '\xef\xbb\xbf115'
Die erste Zahl mit diesem immer verstümmelt ist ‚\ XeF \ xbb \ xbf 'Zeichen. Für den Rest 2 Nummern funktioniert die Konvertierung einwandfrei. Wenn ich '\ xef \ xbb \ xbf' manuell durch '' ersetze und dann die int-Konvertierung vornimmt, funktioniert es.
Gibt es eine bessere Möglichkeit, dies für jede Art von codierter Datei zu tun?
Danke. Dies funktioniert bei meinen UTF-8-Dateien, scheitert jedoch beim Unicode- und Unicode-Big-Endian. Gibt es eine idiotensichere Möglichkeit, jede Art von verschlüsselter Datei zu öffnen und diese Zahlen zu erhalten, oder müsste ich die Codierung explizit angeben? –
AFAIK müssen Sie die Codierung angeben. Offensichtlich können Sie eine kleine Funktion schreiben, die die drei Tests durchführt und eine entsprechend decodierte Datei zurückgibt. – tzot
Großartig. Ich fand das chardet-Modul, das genau das tut http://chardet.feedparser.org/ –