From: Moritz Bunkus Date: Mon, 20 Sep 2010 15:40:06 +0000 (+0200) Subject: Ausgaben mit FCGI richtig codieren X-Git-Tag: release-2.6.2beta1~128 X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/commitdiff_plain/f5bc233522743646b118d0756b0041b16418fbdf?hp=f5bc233522743646b118d0756b0041b16418fbdf Ausgaben mit FCGI richtig codieren Hintergrund: FCGI benutzt Perls I/O-Schitensystem nicht. Deshalb kümmert es sich auch nicht um mit 'binmode STDOUT, ":utf8"' gesetzte Konvertierungsparameter. Weiterhin enthält FCGI ab Version 0.69 Fixes, die doppeltes Encoding bei der Ausgabe vermeiden und damit eigentlich korrektes Verhalten herstellen. Leider geht damit Lx-Offices Art, wie Strings intern gehandhabt und ausgegeben werden, in die Hose. Lx-Office speichert Strings in Perls internem Encoding und verlässt sich auf die mit "binmode" aktivierte, autoatmische Konvertierung bei der Ausgabe. Dieser Workaround implementiert das Umcodieren vom internen Encoding nach UTF-8 mittels Monkeypatching, bevor die FCGIs originale PRINT-Routine aufgerufen wird. Das darf allerdings nicht passieren, wenn unbearbeitete Ausgabe benötigt wird -- z.B. beim Download von Binärdaten (PDFs). Glücklicherweise ist dies in der Funktion "with_raw_io" in Locale gekapselt, sodass dieser Workaround den Status "unbearbeitete Ausgabe?" bei Locale erfragen kann. ---