Include_once und die Umlaute

Hallo
Bin gestern auf die Version 4 umgestiegen und gleich auf ein seltsames Problem gestossen.
Das Script funktioniert:

  $Groups = array(
						array("000D6F0000D32C9B","Wäschetrockner" ),
						array("000D6F00019E1B90","Waschmaschine"  ),
 						);


	$IdData = 39163;

   foreach ( $Groups as $c )
				   {
				   IPS_logmessage(__FILE__,$c[1]."-".$IdData."-".$c[1]);
					$id = IPS_GetObjectIDByName($c[1],$IdData);
					}

Wenn ich das Array in ein eine Include-Datei schreibe bringt es Fehler.

 $file = IPS_GetKernelDir().'scripts/config.ips.php';

   include_once $file;

	$IdData = 39163;

   foreach ( $Groups as $c )
				   {
				   IPS_logmessage(__FILE__,$c[1]."-".$IdData."-".$c[1]);
					$id = IPS_GetObjectIDByName($c[1],$IdData);
					}
			

Und zwar nur bei Objekten mit Umlauten, obwohl im Log die Umlaute korrekt sind.

Objekt mit dem Namen Wäschetrockner konnte nicht gefunden werden

Ohh, das paßt ja.
Hab gestern ebenfalls die ersten Stunden mit 4.0 verbracht und etwas ähnliches beobachtet.

Die Funktion „IPS_GetObjectIdByName“ endete oft mit dem gleichen Fehler. " Objekt mit dem Namen blablabla konnte nicht gefunden werden.

Gemeinsamkeiten:
.) Es trat nur bei Objekten mit Umlauten im Namen auf
.) Es passierte nur unmittelbar nach IPS Neustart. Wenn ich in den betroffenen Scripten ein wenig debuggde, und bspw. die jeweiligen ObjectId mal per echo ausgab, dann funktionierte es. Ebenso funktionierte danach das Script wieder.

Klingt irgendwie so als ob da eine „Umlauteumwandlerfunktion“ nicht rechtzeitig geladen wird.

Hatte dann um 3:00 aber keine Zeit Lust mehr weiter zu forschen.

gruß
bb

Achja, mein IPS läuft auf WIN7.

Kann gut noch ein Umlauteproblem in IPS4 sein. Deshalb verwende ich grundsätzlich in Variablen & Co niemals Umlaute! Auch bei Dateien nicht usw… Desto früher man sich das angewöhnt, um so besser :slight_smile:

Grüße,
Chris

Umlaute werden in IPS4 als UTF-8 kodiert, wohingegen die 3.4 diese als ISO-8859-1. Deswegen können, wenn die alten Skripte noch als ISO-8859-1 kodiert sind, die Namen aber bereits in IPS4 als UTF-8 kodiert sind, genau diese Fehler auftreten.

Lösung: Besser direkt auf IPS_GetObjectIdByIdent umsteigen, oder keine Umlaute in diesen Fällen verwenden.

paresy

Danke fuer die schnelle Antwort. In diesem Fall ist es das Konfigurationsfile des PlugwiseModul der Library.
Hab einfach das File geladen und wieder gespeichert in der Konsole. Funktioniert wieder.
Man muss das nur wissen mit UTF-8. Probleme kommen dann wenn man Scripte mit einem externen Editor
bearbeitet. Hatte Wordpad und PsPad benutzt zum Aendern und die standen auf ANSI.

Du hast Recht! Ich werde das mal in die Migration hinzufügen, sodass es zumindest irgendwo als „bekannt“ notiert ist!

paresy

Ja danke.
Selbiges hier. Script geöffnet, editiert und neu gespeichert. -> geht wieder. Past ja auch genau zu dem was ich gestern beobachtet habe.

gruß
bb