Pythonanfänger schrieb:
> wie gesagt ich bin blutiger Anfänger und verstehe eigentlich nicht sehr
> viel das darin besprochen wird. Zuviele Fachausdrücke.
Willkommen in der wunderbaren Welt von Unicode.
Was du hier beobachtest ist die Spitze eines Eisbergs. Darunter verbirgt
sich folgendes: Python unterscheidet, seit Version 3 sogar ziemlich
strikt, zwischen Zeichen und Bytes.
Zeichen sind abstrakte Gebilde, vereinfacht gesagt Unicode-Codepunkte
(also zum Beispiel das Zeichen ü oder 字). Bytes sind vereinfacht gesagt
Zahlenwerte zwischen 0 und 255. Wann immer Zeichen eingelesen oder
ausgegeben werden müssen sie aus Zahlenwerten in Zeichen dekodiert (beim
Einlesen) oder (beim Ausgeben) wieder in Zahlenwerte zurück enkodiert
werden.
Die serielle Schnittstelle liefert also keine Zeichen (zum Beispiel ü
oder 字) sondern Bytes (also Zahlen zwischen 0 und 255).
Nun deine eigentliche Frage nach dem "b". Zur Darstellung müssen Bytes
in Zeichen verwandelt werden. Dazu benutzt Python per default eine
kompakte Dekodiermethode, die die Bytes so darstellt wie sie auch von
Python als Literal [1] akzeptiert würde, also mit einem "b" am Anfang,
dann einem einfachen oder doppelten Apostroph, dann den Bytewerten
entweder als ASCII-Zeichen oder "escaped", und dann einem schliessenden
Apostroph.
Wenn du diese Darstellung nicht magst, dann musst du die Bytes selber in
Zeichen umwandeln, und dabei eine Darstellung (ein encoding [2])
auswählen, z.B. mit
1 | print(ser_text.strip().decode('latin-1'))
|
LG, Sebastian
[1]
http://docs.python.org/3/reference/lexical_analysis.html#grammar-token-bytesliteral
[2]
[http://docs.python.org/3/library/codecs.html?highlight=standard%20encodings
PS: Der serielle Monitor der Arduino-IDE muss natürlich auch Zahlenwerte
in Zeichen (und eingegebene Zeichen in Zahlenwerte) umwandeln. Er
benutzt dazu anscheinend das Standard-Encoding der Plattform, ist also
viel weniger flexibel als Python.