[Python-de] os.popen() und Umlaute?

Diez B. Roggisch deets at web.de
Fre Feb 10 12:02:34 CET 2006


> Wahrscheinlich bekommst du die Daten utf-8 codiert (ja, manche browser
> machen das).

Nein, UTF-8 ist das was er bekommt nicht, s.u.

> Swish-e kann mit unicode so gar nichts anfangen.

UTF-8 ist _nicht_ unicode. UTF-8 ist ein encoding genauso wie latin1 - nur das 
es durch entsprechende escape-sequenzen _alle_ unicode-zeichen codieren kann. 
Ich betone das hier so, weil eine Menge Leute das durcheinanderwerfen und 
dann Probleme entstehen.

Auch wenn ich unten sehe das du das verstanden hast - genug andere Leute 
leider nicht.

> Kodier die Daten erst in 'latin-1', bevor du sie swish-e uebergibst.
> Komplet ungetested :-) koennte folgendes eventuell funktionieren
>
> suchunicode = unicode(suchbegriff,'utf8')
> suchlatin1 = suchunicode.encode('latin-1')

Das wäre richtig, wenn es denn UTF-8 wäre :)  Aber

>>> u'äöü'.encode("latin1")
'\xe4\xf6\xfc'

zeigt, das die Bytewerte die er bekommt latin1 sind. Er macht sich IMO unnötig 
Sorgen, alles was passiert ist das er seine strings eben als repr(s) ausgibt 
und nicht mittels print. Dann bekommen die ihre hex-darstellung statt als 
bytes ans terminal geschickt zu werden, was dann die entsprechenden Zeichen 
draus macht.


MfG Diez