PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Python + PostgreSQL + seltsames ASCII =UTF8-Codierungsfehler

Die Frage beginnt mit einer falschen Prämisse:

ASCII-Zeichen liegen im Bereich "\x00" bis einschließlich "\x7F".

Die zuvor akzeptierte, jetzt gelöschte Antwort funktionierte unter zwei groben Missverständnissen (1) dieses Gebietsschema ==Codierung (2) dass die latin1-Codierung "\x80" einem Euro-Zeichen zuordnet.

Tatsächlich ordnen alle ISO-8859-x-Kodierungen „\x80“ U+0080 zu, was eines der C1-Steuerzeichen ist, kein Euro-Zeichen. Nur 3 dieser Kodierungen (x in (7, 15, 16)) stellen das Euro-Zeichen als "\xA4" bereit. Siehe diesen Wikipedia-Artikel .

Sie müssen es wissen In welcher Codierung befinden sich Ihre Daten. Auf welcher Maschine wurden sie erstellt? Wie? Das Gebietsschema, in dem es erstellt wurde (nicht unbedingt Ihres), kann Ihnen einen Hinweis geben.

Beachten Sie, dass "Meine Daten sind in latin1 verschlüsselt" oben mit "Der Scheck ist in der Post" und "Natürlich werde ich dich am Morgen lieben" stehen. Ihre Daten sind wahrscheinlich in einer der cp125x-Codierungen codiert, die auf Windows-Plattformen zu finden sind. Beachten Sie, dass alle außer cp1251 (Windows Kyrillisch) "\x80" dem Euro-Zeichen zuordnen:

>>> ['\x80'.decode('cp125' + str(x), 'replace') for x in range(9)]
[u'\u20ac', u'\u0402', u'\u20ac', u'\u20ac', u'\u20ac', u'\u20ac', u'\u20ac', u'\u20ac', u'\u20ac']

Aktualisieren als Antwort auf den Kommentar des OP

Das ist etwas verwirrend:Zuerst sagst du

Aber später sagst du

Bitte erläutern.

Auswahl einer geeigneten cp125x-Kodierung:Wo (geografischer Ort) wurde die Datei erstellt? In welcher Sprache ist der Text verfasst? Irgendwelche Zeichen außer dem angenommenen Euro mit Werten> "\x7f"? Wenn ja, welche und in welchem ​​Zusammenhang werden sie verwendet?

Aktualisierung 2 Wenn Sie nicht "wissen, wie das Programm geschrieben ist", können sich weder Sie noch wir eine Meinung darüber bilden, ob es immer "\x80" für das Euro-Zeichen verwendet. Obwohl es eine gewaltige Dummheit wäre, etwas anderes zu tun, kann es nicht ausgeschlossen werden.

Wenn der Text in englischer Sprache und/oder in den USA und/oder auf einer Windows-Plattform geschrieben ist, dann ist es ziemlich sicher, dass cp1252 ist der richtige Weg ... bis Sie Beweise für das Gegenteil erhalten. In diesem Fall müssten Sie selbst eine Codierung erraten oder die Fragen (welche Sprache, welcher Ort) beantworten.