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
CSV-encoding
@erold:
Dein Beispielstring ist in CP-1254 kodiert: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.
Dein Beispielstring ist in CP-1254 kodiert:
Code: Alles auswählen
In [25]: print u'Özkılıç'.encode('cp1254')
Özkılıç
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?
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?
@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.
@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?
Noch eine Frage stellt sich mir, wie findet man raus wie eine Zeichenkette kodiert ist?