Umlaute und Serielle Schnitstelle

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
StefanJ79
User
Beiträge: 2
Registriert: Samstag 7. Januar 2017, 15:20

Hey Leute,

ja ich weiß das Thema "Umlaute" ;-)

Also ich empfange über die serielle Schnittstelle Daten mittels Python.
Mit den Umlauten gibt es aber probleme in der Verarbeitung als auch in der Anzeige.
Klassisch wird z.B. ein "ß" als "?" angezeigt und wenn im den String nach zb "ß" durchsuche gibt es keine Treffer.
(Obwohl in der Zeichenkette gesendet)
"# -*- coding: iso-8859-1 -*-" verwende ich bereits...

Ich bekomme nämlich Adressdaten über die serielle Schittstelle angeliefert, die mit einer internen Datenbank abgeglichen werden.
Nun passt natürlich zb : "Berliner Straße"(aus Datenbank) nicht mit "Berliner Stra?e"(empfangen über die Serielle) zusammen.

Weiß jemand Rat ?

Gruß Stefan
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@StefanJ79: mit den von Dir gelieferten Informationen kann ich keine Lösung bieten. Entweder sendet das Gerät schon keine Umlaute oder nach dem Lesen ersetzt Du irgendwann Sonderzeichen durch `?`. Was sendet die Daten, woher kommen die, wie verarbeitest Du sie weiter?

PS: Die Kodierungsangabe in der ersten Zeile Deiner Python-Datei sagt nur, wie die .py-Datei kodiert ist, das hat keinen Einfluß auf die Verarbeitung von Daten.
BlackJack

@StefanJ79: Der Kodierungskommentar sagt dem Compiler nur in welcher Kodierung der *Quelltext* vorliegt in dem dieser Kommentar am Anfang steht.

Über die serielle Schnittstelle kommen keine Zeichen, sondern Bytes. Wenn Du daraus Zeichen machen möchtest, dann musst Du diese Bytes dekodieren und zwar mit der Kodierung in der sie auf der anderen Seite vor dem versenden kodiert wurden. Diese Kodierung muss man kennen, das heisst die lässt sich allerhöchstens raten, aber nicht zuverlässig ermitteln wenn man sie nicht kennt, entweder weil das irgendwo dokumentiert ist (notfalls im Quelltext beim Sender durch den Code selbst), oder weil diese Information übermittelt wird.
StefanJ79
User
Beiträge: 2
Registriert: Samstag 7. Januar 2017, 15:20

Also der Sender codiert mit "Windows-1252".
Empfangen mit "daten= ser.readline()"

Wie gehe ich nun mit der (de)Codierung um ?
Benutzeravatar
snafu
User
Beiträge: 6741
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

StefanJ79 hat geschrieben:Wie gehe ich nun mit der (de)Codierung um ?
Bytes haben eine decode()-Methode.
Antworten