Sonderzeichen kurios/Migrationsproblem?

Hallo,

ich habe ein Problem, mit dem ich mich schon Monate immer mal wieder rumschlage:

Anscheinend werden Sonderzeichen bei Verwendung des „.=“-Operators falsch verarbeitet.
Der gleiche Code läuft unter V3.4 völlig korrekt.
Das Codebeispiel läuft auch unter V4 korrekt, wenn alle Objekte neu erzeugt werden (Nachstellen auf einem 2ten PI mit neu installiertem IPS)
Dies zeigt auf ein mögliches Migrationsproblem V3.4Win → V4-Raspbian.

Details:
$input=GetValueString(xxxxx);
$output.=$input;
Der „.=“-Operator macht hier aus „ÜüÄäÖö“ offensichtlich Ã?üÃ?äÃ?Ã.$input
s. Codebeispiel und Output in „Meldungen“ und aus dem Logfile weiter unten…
Der selbe Code funktioniert im selben Script korrekt, wenn den Variablen statische Werte zugewiesen werden.

Wie kann ich das beheben? Jemand eine Idee? Bug? Neu Migrieren scheidet wohl aus, da unter V4.0 schon viele Features hinzugefügt wurden.

Danke + Grüße
Christian


<?
// Aufruf des Scriptes mit IPS_RunScriptEx(xxxxx /*[Alarmzentrale\Protokoll_Write_Line]*/, Array("text" => "$writetext"));
//$writetext=zu übergebener String
$text=$_IPS['text'];
//$text="test";
IPS_LogMessage((string)$_IPS["SELF"],"Protokoll übergebener Text:$text");
$input=GetValueString(xxxxx /*[Alarmzentrale\Statustext]*/);
//Timestamp erzeugen
setlocale(LC_TIME,'de_DE@euro','de_DE','de','ge');
$timestamp=strftime("%a-%d.%m.%Y-%H:%M:%S Uhr");
// Aussgabe zusammenstellen konkatinieren + Zeilenumbruch
$output=($timestamp ." | " .$text ."
");
IPS_LogMessage((string)$_IPS["SELF"],"Protokoll output1:$output");
$output.=$input;
IPS_LogMessage((string)$_IPS["SELF"],"Protokoll output2:$output");
SetValueString(xxxxx /*[Alarmzentrale\Statustext]*/,"$output");

// Testsequenz output1 -> output2
$input="ÄÖÜ";
$output="äöü";
$output.=$input;
IPS_LogMessage((string)$_IPS["SELF"],"Test output:$output");
?>

Ausgabe Konsole\Meldungen:

04.10.2015 12:20:10*| xxxxx*| Protokoll übergebener Text:ÜüÄäÖö
04.10.2015 12:20:10*| xxxxx*| Protokoll output1:Sun-04.10.2015-12:20:10 Uhr | ÜüÄäÖö
04.10.2015 12:20:10*| xxxxx*| Protokoll output2:Sun-04.10.2015-12:20:10 Uhr | �ü�ä�ö
Sun-04.10.2015-12:19:42 Uhr | Protokoll gelöscht.
04.10.2015 12:20:10*| VariableManager*| [Alarmzentrale\Statustext] = Sun-04.10.2015-12:20:10 Uhr | �ü�ä�ö
Sun-04.10.2015-12:19:42 Uhr | Protokoll gelöscht.
04.10.2015 12:20:10*| xxxxx*| Test output:äöüÄÖÜ

/var/log/symcon/logfile.log

12:20:10 | 58876 | DEBUG | ScriptEngine | Executed Script Alarmzentrale\Test_Protokoll ~ Sender: Execute
12:20:10 | 00000 | CUSTOM | xxxxx | Protokoll übergebener Text:ÜüÄäÖö
12:20:10 | 00000 | CUSTOM | xxxxx | Protokoll output1:Sun-04.10.2015-12:20:10 Uhr | ÜüÄäÖö

12:20:10 | 00000 | CUSTOM | xxxxx | Protokoll output2:Sun-04.10.2015-12:20:10 Uhr | ÜüÄäÖö
Sun-04.10.2015-12:19:42 Uhr | Protokoll gel▒scht.

12:20:10 | 23817 | MESSAGE | VariableManager | [Alarmzentrale\Statustext] = Sun-04.10.2015-12:20:10 Uhr | ÜüÄäÖö
Sun-04.10.2015-12:19:42 Uhr | Protokoll gel▒scht.

12:20:10 | 00000 | CUSTOM | xxxxx | Test output:äöüÄÖÜ
12:20:10 | 31710 | DEBUG | ScriptEngine | Executed Script Alarmzentrale\Protokoll_Write_Line ~ Sender: RunScript

Das Problem mit den Umlauten im Meldungsfenster ist im nächsten Update gelöst.
Das Logfile enthält jedoch weiter die UTF-8 kodierten Zeichen, sodass es je nach Anzeigetool nicht korrekt angezeigt wird.

Wenn du unbedingt die normalen Windows Latin-1 Zeichen brauchst, kannst du die Sequenz durch utf8_decode laufen lassen.

paresy

Hallo Paresy

ich habe das Update mit dem Bugfix auf armhf 4.0-251 durchgeführt und getestet

Ergebnis: unverändert

08.10.2015 18:19:51*| xxxxx*| Protokoll übergebener Text:ÜüÄäÖö
08.10.2015 18:19:51*| xxxxx*| Protokoll output1:Thu-08.10.2015-18:19:51 Uhr | ÜüÄäÖö
08.10.2015 18:19:51*| xxxxx*| Protokoll output2:Thu-08.10.2015-18:19:51 Uhr | �ü�ä�ö
Thu-08.10.2015-18:19:30 Uhr | Protokoll gelöscht.
08.10.2015 18:19:51*| VariableManager*| [Alarmzentrale\Statustext] = Thu-08.10.2015-18:19:51 Uhr | �ü�ä�ö
Thu-08.10.2015-18:19:30 Uhr | Protokoll gelöscht.
08.10.2015 18:19:51*| xxxxx*| Test output:äöüÄÖÜ

Dann habe ich die eingangs genannten Unterschiede zwischen den Installationen nochmal aufgegriffen und auf Verdacht die Text(String)-Variable (xxxxx /[Alarmzentrale\Statustext]/) durch ein neues Objekt ersetzt und in den Scripten eingebunden

Ergebnis: alle Sonderzeichen werden nun korrekt dargestellt.

08.10.2015 18:36:38*| xxxxx*| Protokoll übergebener Text:ÜüÄäÖö
08.10.2015 18:36:38*| xxxxx*| Protokoll output1:Thu-08.10.2015-18:36:38 Uhr | ÜüÄäÖö
08.10.2015 18:36:38*| xxxxx*| Protokoll output2:Thu-08.10.2015-18:36:38 Uhr | ÜüÄäÖö
Thu-08.10.2015-18:35:42 Uhr | Protokoll gelöscht.
08.10.2015 18:36:38*| VariableManager*| [Alarmzentrale\Statustext New] = Thu-08.10.2015-18:36:38 Uhr | ÜüÄäÖö
Thu-08.10.2015-18:35:42 Uhr | Protokoll gelöscht.
08.10.2015 18:36:38*| xxxxx*| Test output:äöüÄÖÜ

Mein Problem ist erst mal gelöst – wenn auch unverstanden…

Grüße
Christian