XSLT Problem mit kyrillischen Schriftzeichen

Hallo Zusammen,

ich habe ein Problem bei einer XSLT die im Rahmen bzw. Umfeld von einem CMS System passiert.

Im CMS liegt ein XML File welches mit einem XSL Stylesheet in in HTM Dokument umgewandelt wird. Wie das genau intern abläuft weiß ich leider nicht ... ich kann nur sagen das XALAN in der Version 2.3.1 eingesetzt wird dabei.

Das Problem ist folgendes: In der XML Datei finden sich folgende Schriftzeichen:

???? (kyrillische Schriftzeichen)

Im HTM Dokument erscheint dann allerdings:

ФÐ?КУ

Encoding steht auf UTF-8. Also daran liegt es nicht ... falls das encoding falsche wäre würde er auch nicht zu diesen "neuen" Schriftzeichen kommen sondern einen Fehler produzieren.

XALAN 2.3.1 kann generell schon mit den kyrillischen Schriftzeichen umgehen ... lokal mit einem kleinen und kurzen Beispiel gibt es keine Probleme. Allerdings weiß ich nicht ob XALAN automatisch noch andere JAR`s zum Helfen aufurft von meiner lokalen HD und ob die dann evtl. neurer Version sind (kann ich schwer feststellen, weil alles im Classpath liegt).

Die Frage aller Fragen lautet nun:

Was passiert da bzw. was läuft schief und wie kann ich es beheben?

Hat jemand eine Idee?

Viele Grüße
Oliver
 
Hi.

Welches Encoding ist denn im HTML eingestellt? Wird im XSL ein Encoding für die Ausgabe explizit angegeben? Welches Encoding wird in den HTTP Headers vom Server übermittelt? Tritt das Problem bei allen Browsern auf?

Gruß
 
Encoding in HTML?

Gar keins. Es wird kein komplettes HTML Dokument erzeugt sondern nur ein Teil (weil es ein CMS System ist) ... erst später wird dann noch etwas zusammengebastelt.

Aus der XML Datei wird folgendes HTML File erstellt (Auszug):

Code:
<table width="100%" class="content" cellspacing="0" cellpadding="0"><tr><td valign="top" style="padding:0px 0px 35px;" class="headline">FAQ/ФÐ?КУ</td></tr><tr><td valign="top" style="padding:0px 0px;"><div style="clear:left"></div><p>
Introsatz - Test Test
</p><p><b>Why to get listed</b></p><table cellpadding="0" cellspacing="0"><tr><td valign="top" width="15"><img height="7" width="7" class="bullet" src="/dbag/images/layout/bullet.gif"></td><td><p>

Später kommt dann noch <head> und der ganze Kram dazu ... aber diese komischen Schriftzeichen (ФÐ?КУ) sind ja bereits hier da.

Die Schriftzeichen sind im Quelltext so drin ... also auch kein Browser Problem.

Was meinst du mit XSL Encoding angeben?
 
Diese "komischen Zeichen" sind schon ganz in Ordnung. Sie werden nur nicht als UTF-8 interpretiert. Das große kyrillische EF wird in UTF-8 durch die Byte-Sequenz D0 A4 kodiert. Genau das sind die ersten beiden Zeichen hinter dem Schrägstrich nach FAQ. Und die anderen Byte-Sequenzen stimmen auch. (D0 90 D0 9A D0 A3)

Die Frage ist also: Warum interpretiert dein Editor/Browser/Textverarbeitungsprogramm die Zeichen nicht als UTF-8? Wenn das Ergebnis in ein HTML Dokument nur eingefügt wird, dann muß natürlich das entsprechende HTML Dokument auch in UTF-8 kodiert sein bzw. konvertiert werden.

Standardmäßig erzeugt ein XSL Prozessor UTF-8 Ausgaben. Man kann aber mit dem Attribut encoding beim xsl:eek:utput Element im XSL Stylesheet ein anderes Encoding angeben.

Gruß
 
Naja ... im Quellcode stehen ja schon diese "komischen" Zeichen drin ... Von daher würde ich sagen hat der Browser keine Schuld .. Oder?

Kann es helfen im HTML Dokument sowas einzufügen?:

<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-5">
 
KrustyDerClown hat gesagt.:
Naja ... im Quellcode stehen ja schon diese "komischen" Zeichen drin ... Von daher würde ich sagen hat der Browser keine Schuld .. Oder?
Der Browser kann den Quellcode nur richtig interpretieren wenn die Information über das Encoding richtig ist. Wenn nichts angegeben ist (weder im HTTP Header, noch mit einem meta Tag) dann nutzt der Browser Heuristiken und versucht zu erkennen um was für ein Encoding es sich handelt und verwendet letztendlich das Standard-Encoding (im deutschen Firefox ist das normalerweise "Westlich (ISO-8859-1)") wenn die Erkennung fehlschlägt.

KrustyDerClown hat gesagt.:
Kann es helfen im HTML Dokument sowas einzufügen?:
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-5">
Na so aber auf keinen Fall. Es ist ja gerade das Problem das der Browser nicht das UTF-8 Encoding verwendet - da hilft es nicht wenn man dann noch ein falsches Encoding angibt. Wenn dann sollte da charset="utf-8" stehen.

Beim Firefox kann man sich die verwendete Kodierung übrigens auf den Seiteninformationen anschauen. Mit der Erweiterung LiveHTTPHeaders für Firefox oder Fiddler für IE kann man auch die HTTP Header überprüfen.

Gruß
 
Zurück