
Hallo,
ich bin dabei Text über meine test.py im Webbrowser anzeigen zu lassen. Ich hab nun schon viel herum probiert und gegoogled aber irgendwie komm ich nicht vorran.
Mit Python 3.2.1: FF5 und IE9 => falsche Sonderzeichen Eclipse Console => richtig Darstellung
Mit Python 2.7.2: FF5 und IE9 => richtige Darstellung Eclipse Console => richtige Darstellung
Ich habe immer # -*- coding: utf-8 -*- in der 2. Zeile stehen. ändere ich das auf # -*- coding: iso-8859-1 -*- funktioniert es mit 3.2.1, aber das scheint mir nicht die Lösung des Problems zu sein den mein Ziel ist es ja UTF-8 zu machen nicht Iso.
Hab mit dem Firebug den Header kontrolliert, der gibt auch utf8 aus. Habe auch versucht die Dateien zu konvertieren mit Notepad++ und hab ANSI, UTF-8, UTF-8 ohne BOM probiert hilft aber alles nichts.
Habe einen XAMPP bei mir laufen, funktioniert auch mit Python bis auf das Umlautproblem Apache/2.2.17 (Win32) mod_ssl/2.2.17 OpenSSL/0.9.8o PHP/5.3.4 mod_perl/ 2.0.4 Perl/v5.10.1
test.py #!C:\Python32\python.exe # -*- coding: utf-8 -*-
print("Content-Type: text/plain; charset=utf-8") print()
print("äöüß")
Ausgabe im Browser: ���
Hat jemand eine Idee wo ich noch etwas verstellen könnte oder wo das Problem liegen kann?
Maik

On 23 Jul., 16:39, m3rlin7 m3rl...@googlemail.com wrote:
[...] Mit Python 3.2.1: FF5 und IE9 => falsche Sonderzeichen Eclipse Console => richtig Darstellung
Du musst aufpassen, da Python3 ein komplett verändertes Unicode verhalten hat als Python2. [1]
[...]
lg Julian
[1]: http://docs.python.org/release/3.0.1/howto/unicode.html

m3rlin7, 23.07.2011 16:39:
ich bin dabei Text über meine test.py im Webbrowser anzeigen zu lassen.
CGI?
Ich hab nun schon viel herum probiert und gegoogled aber irgendwie komm ich nicht vorran.
Mit Python 3.2.1: FF5 und IE9 => falsche Sonderzeichen Eclipse Console => richtig Darstellung
Mit Python 2.7.2: FF5 und IE9 => richtige Darstellung Eclipse Console => richtige Darstellung
Ich habe immer # -*- coding: utf-8 -*- in der 2. Zeile stehen. ändere ich das auf # -*- coding: iso-8859-1 -*- funktioniert es mit 3.2.1, aber das scheint mir nicht die Lösung des Problems zu sein den mein Ziel ist es ja UTF-8 zu machen nicht Iso.
Hab mit dem Firebug den Header kontrolliert, der gibt auch utf8 aus. Habe auch versucht die Dateien zu konvertieren mit Notepad++ und hab ANSI, UTF-8, UTF-8 ohne BOM probiert hilft aber alles nichts.
Habe einen XAMPP bei mir laufen, funktioniert auch mit Python bis auf das Umlautproblem Apache/2.2.17 (Win32) mod_ssl/2.2.17 OpenSSL/0.9.8o PHP/5.3.4 mod_perl/ 2.0.4 Perl/v5.10.1
test.py #!C:\Python32\python.exe # -*- coding: utf-8 -*-
Diese Zeile beeinflusst nur den Source-Code, also den Weg vom Code nach Unicode, aber nicht die Ausgabe von Unicode-Strings aus dem Programm heraus.
print("Content-Type: text/plain; charset=utf-8") print()
print("äöüß")
Ausgabe im Browser: ���
Hat jemand eine Idee wo ich noch etwas verstellen könnte oder wo das Problem liegen kann?
Das Problem ist, dass du den ausgegebenen Text nicht kodierst, sondern das Pythons Standardkodierung überlässt. Und die ist laufzeitabhängig - bei dir (unter Windows) wahrscheinlich CP1252, was zu einem Großteil mit Latin-1 übereinstimmt. Deshalb funktioniert es mit der ISO-Kodierung.
Das Problem ist, dass Python ja nicht von selbst wissen kann, ob du Binärdaten ausgeben willst (also z.B. ein Bild oder kodierten Text) oder Unicode-Text, den Python dann für dich kodieren soll. In Python 3.2 wurde das schlussendlich dadurch gelöst, dass die I/O-Streams beides zulassen, aber nur explizit über separate APIs. Hier ist die Dokumentation dazu:
http://docs.python.org/py3k/library/sys.html#sys.stdout
Für einfache CGI-Skripte kannst du den Ausgabemodus umschalten, zumindest solange nichts anderes versucht, auf deine Standardausgabe zu schreiben. Für alles andere solltest du Binärdaten explizit nach "sys.stdout.buffer" schreiben, anstatt print() zu benutzen.
Stefan

Ausgabe im Browser: ���
Offensichtlich ist das kein utf-8, sondern ein single-byte-coding, das aber nicht richtig dargestellt wird, weil Dein Browser ja von utf-8 ausgeht.
Hat jemand eine Idee wo ich noch etwas verstellen könnte oder wo das Problem liegen kann?
Dein Hauptproblem ist dass Du print fuer ne webapp benutzen willst.
Vergiss das besser, das ist langfristig eh nicht tragbar.
Wenn Du derzeit mit python 2.x auskommst, nimm werkzeug (und ggf. flask, wenn Du auch ein Framework haben willst).
Das ist jetzt am Anfang etwas mehr Arbeit, Du sparst aber langfristig viel Arbeit und Debugging und musst Dich nicht mit allen vielen Kleinigkeiten und Widrigkeiten selbst rumschlagen.
Wenn Du unbedingt python 3 willst, dann nimm halt auf jeden Fall WSGI, dann hast Du mehr Kontrolle ueber das, was passiert.
participants (4)
-
Julian Rath
-
m3rlin7
-
Stefan Behnel
-
Thomas Waldmann