PANGO-UFT8 Fehler

Umlaut- und Sonderzeichenproblem in RRDTool

Das RRDTool lief rund von Anfang an. Das einzige richtige Problem bestand in der Benutzung von Umlauten und Sonderzeichen in den Grafiken. Das RRDTool erzeugte eine

Pango-WARNING **: Invalid UTF-8 string passed to pango_layout_set_text()

Die Ursache war schnell ergoogelt. Irgendwas stimmte mit den Zeichensätzen nicht. Logisch, wenn man sich die Fehlermeldung anschaut. Die Lösung ließ allerdings etwas auf sich warten und wahrscheinlich gibt es ‘bessere’ als meine, aber sie funktioniert.

Das Problem besteht darin, das Perl nicht automatisch UTF8 String erstellt und diese an das RRDTool weitergibt. Also muss man Perl irgendwie dazu bringen. Mein zweiter Ansatz war die Benutzung des Paketes Encode. Dieses enthält eine Funktion encode, mit der man String in verschiedene Format ‘encoden’ kann.  Hier mal ein kurzer Auszug:

use Encode;

  …

my ($graphret,$xs,$ys) = RRDs::graph "$www_path/temp-intern.png", "--title", 'Interne Temperatur der letzen 36 Stunden',
"--vertical-label", encode("utf8", 'Grad °C'),
"--start", (-129600),
"--end", $time,
"--imgformat","PNG",
"DEF:temp_rueck_ist=$RRD:temp_rueck_ist:AVERAGE",
"DEF:temp_rueck_soll=$RRD:temp_rueck_soll:AVERAGE",
"DEF:temp_ww_ist=$RRD:temp_ww_ist:AVERAGE",
"DEF:temp_ww_soll=$RRD:temp_ww_soll:AVERAGE",
"VDEF:temp_ww_soll1=temp_ww_soll,MINIMUM",
"DEF:min_ww_ist=$RRD:temp_ww_ist:MIN",
"VDEF:min_ww_ist1=min_ww_ist,MINIMUM",
'COMMENT: n',
encode("utf8",'LINE1:temp_rueck_ist#ff0000:Rücklauf IST'),
encode("utf8",'LINE2:temp_rueck_soll#00ff00:Rücklauf SOLL'),
'LINE3:temp_ww_ist#0000ff:Warmwasser IST',
encode("utf8",'GPRINT:temp_ww_soll1:                      WW-Soll: %5.1lf °Cn'),
COMMENT:s',
encode("utf8",'GPRINT:min_ww_ist1:Min. WW-Temperatur: %5.1lf °C               Grafik erzeugt amn'),
encode("utf8",'GPRINT:min_ww_ist1:Min. Temperatur: %5.1lf °C             ' . $cur_date . 'n');

Wie man sieht, ist die Benutzung recht einfach. Jedem String mit Umlauten oder Sonderzeichen (z.B. °) einfach mittels encode (”utf8″,’ Hier den String rein’) in einen uft8 String umwandeln und schon ist di elästige Fehlermeldung weg und man kann schöne Grafiken erzeugen.

Ich hoffe, das Hilft euch auch weiter.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.