Python MySQL CSV-Export in JSON seltsame Codierung

8

Ich habe eine CSV-Datei erhalten, die aus einer MySQL-Datenbank exportiert wurde (ich glaube, die Codierung ist latin1, da die Sprache spanisch ist). Leider ist die Kodierung falsch und ich kann sie überhaupt nicht verarbeiten. Wenn ich Datei verwende:

$ file -I file.csv file.csv: text/plain; charset=unknown-8bit

Ich habe versucht, die Datei in Python zu lesen und in utf-8 umzuwandeln, wie:

r.decode('latin-1').encode("utf-8")

oder mit mysql_latin1_codec :

r.decode('mysql_latin1').encode('UTF-8')

Ich versuche, die Daten in json-Objekte umzuwandeln. Der Fehler tritt auf, wenn ich die Datei speichere:

'UnicodeEncodeError:' ascii 'Codec kann Zeichen in Position'

nicht codieren

Weißt du, wie ich es in normale utf-8 Zeichen umwandeln kann? Oder wie kann ich Daten in einen gültigen JSON konvertieren? Danke !!

    
alexsc 25.10.2016, 09:23
quelle

3 Antworten

1

Ich habe sehr gute Ergebnisse erzielt, indem ich den Pandas Dataframe von Continuum Analytics verwendet habe.

Sie könnten etwas wie:

machen %Vor%

Dann könnten Sie tun:

%Vor%

oder in JSON konvertieren:

%Vor%

oder wenn Sie Ihr json-Format anpassen möchten, finden Sie in der Dokumentation hier: Ссылка

    
Beatriz Kanzki 27.12.2016, 00:02
quelle
0

Haben Sie versucht, das Codecs-Modul zu verwenden?:

%Vor%

Ich erinnere mich, dass ich vor einiger Zeit ein ähnliches Problem hatte und die Antwort etwas damit zu tun hatte, wie die Kodierung vor Python 3 gemacht wurde. Codecs scheint dieses Problem relativ elegant zu lösen.

Wie in den Fragenkommentaren erwähnt, ist es schwierig, das Problem zu lokalisieren, ohne es reproduzieren zu können, so dass ich den falschen Baum anbelle.

    
Adam Henderson 25.10.2016 13:09
quelle
0

Sie haben wahrscheinlich zwei Probleme. Aber lassen Sie uns zurück ... Wir können nicht sagen, ob der Text falsch importiert, falsch exportiert oder nur doof angezeigt wurde.

Zuerst werde ich über "Importieren" sprechen ...

Versuchen Sie nicht, die Codierung zu ändern. Lebe stattdessen mit der Kodierung. Aber zuerst, herauszufinden, was die Codierung ist. Es könnte latin1 oder utf8 sein. (Oder eines von vielen weniger wahrscheinlichen Zeichensätzen.)

Finde das Hex für die eingehende Datei. In Python ist der Code etwa so, um hex (etc) für den String u :

zu dumpen %Vor%

Sie können hier aufrufen, um eine Liste der Hexadezimalwerte für anzuzeigen alle latin1-Zeichen zusammen mit dem utf8 hex. Zum Beispiel ist ó latin1 F3 oder utf8 C2B3 .

Jetzt, vertraut mit der Kenntnis der Kodierung, sag MySQL das.

%Vor%

In der Zwischenzeit ist es egal, welche CHARACTER SET ... die Tabelle oder Spalte definiert ist; mysql wird bei Bedarf transcodieren. Alle spanischen Zeichen sind in latin1 und utf8 verfügbar.

Gehen Sie zu dieses Q & A; .

Ich habe vorgeschlagen, dass Sie zwei Fehler haben, einer ist der dort erwähnte "schwarze Diamant" -Fall; da ist noch etwas anderes. Aber ... Folgen Sie den "Best Practice" erwähnt.

Zurück zu Ihrer Frage von "exporting" ...

Auch hier müssen Sie das Hex der Ausgabedatei überprüfen. Wieder ist es egal, ob es sich um latin1 oder utf8 handelt. Allerdings ... Wenn das hex% C383C2B3 für einfach ó ist, hast du "double encoding". Wenn Sie das haben, überprüfen Sie, ob Sie alle manuellen Konvertierungsfunktionsaufrufe entfernt haben, und erzählte MySQL einfach, was es ist.

Hier finden Sie weitere utf8 + Python-Tipps , die Sie möglicherweise benötigen.

Wenn Sie mehr Hilfe benötigen, folgen Sie dem Text Schritt für Schritt. Zeigen Sie uns den Code, der zum Verschieben / Konvertieren bei jedem Schritt verwendet wird, und zeigen Sie uns die HEX bei jedem Schritt.

    
Rick James 25.10.2016 19:36
quelle

Tags und Links