2016-03-29 2 views
0

Ich versuche, Namen aus einem Datensatz zu analysieren, der unterschiedliche (gemischte) Codierungen innerhalb des Datensatzes verwendet. Es enthält Ortsnamen, neben vielen anderen Geodaten. Nach dem Ausführen des Skripts erhalte ich eine Liste von Ortsnamen, die mit Geo-Standorten übereinstimmen, d. H. [u'BR', u'BR-ES', u'BRA', u'Brasil', u'Brazil', u'ES', u'Espirito Santo', u'Esp\xedrito Santo', u'Federative Republic of Brazil', u'Guarapari', u'Rep\xfablica Federativa do Brasil', u'gpxupload.py']. Soweit alles gut. Aber manchmal gibt die Datenmenge führe ich wie u'Taubat\u0102\u0160', die in der analyzation als TaubatĂŠ behandelt wird anstelle des richtigen Wertes Taubaté, das vorherige Beispiel erzeugt Espírito Santo und Republic Federative do BrasilDie Analyse von Datensätzen mit Unicode-Zeichen mit unterschiedlichen Codierungen führt zu seltsamen Ergebnissen

Gibt es eine Möglichkeit \u0102\u0160 zu erfassen und wandelt sie in \xe9 ohne um individuelle .replace() Regeln für jeden Buchstaben zu erstellen?

Antwort

1

u'Taubat\u0102\u0160' wurde mit dem falschen Codec dekodiert. Es war eigentlich UTF-8, aber entschlüsselt als 'iso-8859-2'. Idealerweise entschlüsselt es richtig an erster Stelle, aber die folgenden Rücken aus dem Fehler:

>>> u'Taubat\u0102\u0160'.encode('iso-8859-2').decode('utf8') 
u'Taubat\xe9' 
>>> print(u'Taubat\u0102\u0160'.encode('iso-8859-2').decode('utf8')) 
Taubaté 
+0

Ich habe versucht, Ihr Beispiel, aber es scheint, wie es nicht funktioniert, da der Eingang sieht aus wie es von gemischter Kodierung: 'Traceback (letzter Anruf zuletzt): Datei" ./gpxtest.py ", Zeile 619, in get_relation Ergebnis.encode zurücksenden ('iso-8859-2'). Decode ('utf8') Datei"/System /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/encodings/iso8859_2.py ", Zeile 12, in encode Rückgabecodecs.charmap_encode (Eingabe, Fehler, Codierungstabelle) UnicodeEncodeError: 'Charmap' Codec Zeichen in Position 830-837 können nicht codiert werden: Zeichenkodierung auf ' –

+0

Wenn Sie Codierungen gemischt haben und nicht wissen, was sie sind, haben Sie ein größeres Problem. –

+0

Ich probiere gerade eine 'clean (string)' -Funktion aus, die 'string.encode ('encoding') .decode ('utf8')' gegen verschiedene Kodierungen versucht. Momentan scheint es zu funktionieren, obwohl es einige Stunden dauern wird. –