@Question: `text` enthält keine "ö" als "ö" sondern `text` enthält Bytewerte bei denen "ö"s UTF-8 kodiert sind und Du sie aber mit einer anderen Kodierung dekodiert anschaust und deshalb "ö" siehst. Der erste Quelltextschnippsel sieht danach aus als wenn die Bytes an einen Browser geschickt werden. Die erwarten, solange sie nichts anderes gesagt bekommen, dass Texte als ISO-8859-1 kodiert sind. Das würde "ö" erklären, denn so sieht ein UTF-8 kodiertes "ö" aus wenn man es fälschlicherweise als ISO-8859-1 dekodiert.
Code: Alles auswählen
In [134]: a
Out[134]: '\xc3\xb6'
In [135]: print a.decode('UTF-8')
ö
In [136]: print a.decode('iso-8859-1')
ö
Das kleine Beispiel könntest Du zum Beispiel korrigieren, in dem Du den Inhalt von `text` von UTF-8 nach ISO-8859-1 umkodierst, oder in dem Du neben dem Content-Type-Header noch einen entsprechenden mit sendest, der dem Browser sagt, dass die Daten die danach kommen in UTF-8 kodiert sind.
Der `SyntaxError` zu dem ``.replace("ö","ö")`` führen kann, unter der Voraussetzung, dass sonst kein Syntaxfehler im Quelltext vorhanden ist, hat einen Text der erklärt warum der Fehler ausgelöst wird und eine URL wo man das noch einmal genauer nachlesen kann und wo auch steht was man dagegen tun kann.
Wobei der `UnicodeEncodeError` genau auftritt verrätst Du ja nicht, aber die Werte die `ElementTree` liefert sind etwas anderes als das was Du an `text` gebunden hast. Denn die `ElementTree` liefert keine Bytestrings sondern `unicode`-Objekte wenn etwas ausserhalb von ASCII enthalten ist. Bevor Du *das* also an irgend eine API weitergibst, die Bytestrings erwartet, musst *Du* dafür sorgen dass die so kodiert werden wie die API oder zum Beispiel der Browser das erwartet, der auf der anderen Seite auf die Daten wartet.
Wenn Du mit Zeichen arbeitest und dabei Unicode involviert ist, solltest Du intern mit Unicode arbeiten, und dabei so früh wie möglich Bytestrings dekodieren und so spät wie möglich das ganze in Bytestrings zurück wandeln, wenn eine API kein Unicode versteht.
Lesestoff im Wiki zum Thema: „
Von Umlauten, Unicode und Encodings”.