CSV-encoding

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
erold
User
Beiträge: 3
Registriert: Dienstag 21. Oktober 2014, 17:33

Hallo zusammen

Zurzeit habe ich folgendes Problem: Ich hab eine CSV-Datei mit Namen, Vornamen und noch ein paar anderen Daten. Ich lese die dann mit dem DictReader ein. Als encoding verwende ich utf-8. Leider hats in der Datei ab und zu "komische" Namen, wie z.B. Özkılıç -> die CSV Datei wird von einer Datenbank im Internet exportiert...daran kann ich nichts ändern... ich weiss der Name wird falsch exportiert aber er steht jetzt nun mal so in der CSV Datei und ich sollte ihn einfügen ins Dictonary. Hab schon andere encoding Arten versucht, utf-16 und 32. Eigentlich will ich nur, dass das Script nicht abbricht, wenn er so einen komischen Namen sieht, entweder sollte er ihn richtig encodieren können oder überspringen. Ich hoffe mein Problem ist verständlich :)

Grüsse erold
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@erold:

Dein Beispielstring ist in CP-1254 kodiert:

Code: Alles auswählen

In [25]: print u'Özkılıç'.encode('cp1254')
Özkılıç
Falls das zur Domäne der Datenbank passt, sind die Daten vermutlich alle türkisch kodiert. Wenn Du Pech hast, liegen in der DB Bytestrings von Benutzereingaben ohne Wissen übers Encoding. Dann hilft nur noch Probieren und Schauen, ob das Ergebnis Sinn ergibt.
erold
User
Beiträge: 3
Registriert: Dienstag 21. Oktober 2014, 17:33

Hallo jerch

Vielen Dank, jetzt funktionierts :-)
Also die Namen in der DB sind hauptsächlich schon deutsche Namen, hat aber vereinzelnte ausländische Namen dabei, wie hier das Beispiel. Ich hab noch nicht so viel Erfahrung mit encoding, bis jetzt hats immer mit utf funktioniert. Darum noch die Frage hat das cp-1254 einfach noch zusätzliche Zeichen zum utf-8? Also es sollte eigentlich jetzt keine Probleme geben mit den normalen deutschen Namen?
BlackJack

@erold: cp-1254 kann weniger Zeichen kodieren als UTF-8. Es geht aber gar nicht darum ob eine Kodierung mehr oder weniger Zeichen dekodieren kann, sondern das man die *richtige* auswählt, die zu den Daten passt. Und wenn man selbst etwas kodiert und man die Freiheit hat sich eine Kodierung auszusuchen, dann bietet sich in der Regel UTF-8 an, weil man damit alle Unicode-Zeichen kodieren kann und ASCII eine Untermenge ist, und zumindest bei Daten wo mehr ASCII als andere Zeichen vorkommen, UTF-8 auch recht kompakt ist.
erold
User
Beiträge: 3
Registriert: Dienstag 21. Oktober 2014, 17:33

@BlackJack: Okey danke, hab jetzt den Unterschied verstanden :-) Dann ist für meine Anwendung cp-1254 das richtige um die Daten zu dekodieren.

Noch eine Frage stellt sich mir, wie findet man raus wie eine Zeichenkette kodiert ist?
BlackJack

@erold: Das muss man wissen. Falls nicht muss man raten und hoffen.
Antworten