Ankündigung

Einklappen
Keine Ankündigung bisher.

Win (10) Registry file einlesen und bearbeiten - Zeichenkodierungsproblem

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Win (10) Registry file einlesen und bearbeiten - Zeichenkodierungsproblem

    Hallo,
    habe mal wieder eine Wissenslücke.

    Ich möchte gerne eine *.reg Datei, die ich im Windows (10, Version dürfte aber eher egal sein?) REGEDIT erstellt habe, mit PHP einlesen, weiter verarbeiten. Es geht mir NICHT darum, Werte "live" zu lesen und auch nicht, sie zurück zu schreiben ... allerdings will ich später evtl. Teildateien schreiben, um bestimmte Schlüssen auf anderen Rechnern zu importieren.

    Ich nutze zunächst file() um die Datei in ein Array zu lesen. Gebe ich dann dir einzelnen Zeilen aus, werden sie im Browser zwar korrekt (ohne Lücken) dargestellt, schaue ich sie mir aber im Seitenquelltext an, ist immer ein Blank zwischen allen Zeichen und auch das führende Zeichen ist ein Blank. Damit schlagen natürlich alle Versuche, Teile "herauszuschneiden" oder "Matchwords" zu suchen, fehl.

    Schaue ich die Datei in einem Editor an (z.B. Notepad++) und lasse mir die Kodierung anzeigen, so wird "UCS-2 LE-BOM" angezeigt. Ergo muß ich beim Einlesen die Zeichenkodierung ändern (natürlich ohne Zeichen zu verlieren ...). Leider bin ich noch nicht dahinter gekommen, wie ich das mache. Nehme an, dass es hier sicher Leute gibt, die schon über ähnliches gestolpert sind?

    Danke für Hinweise!
    Ich muss PHP im Kontext Home Automation nutzen (Vorgabe Hersteller und nicht zu ändern). Da kommt es leider ggf. auf ms an. Deshalb manche "seltsame" Frage.

  • #2
    Mit mb_convert_encding() kannst du die Zeichenkodierung konvertieren.

    PHP-Code:
    $fileContent file_get_contents('c:\pfad\datei.reg');

    $utf8Content mb_convert_encoding($fileContent'UTF-8''UTF-16LE');

    $lines explode(PHP_EOL$utf8Content);
    foreach (
    $lines as $line) {
        echo 
    $line "<br>";

    Kommentar


    • #3
      Sorry dass ich erst jetzt antworte.
      Danke für den Hinweis. Das hatte ich in PHP.NET auch entdeckt, es hatte aber nicht geklappt. Ich werde das nun nochmal probieren. Im Moment kämpe ich allerdings mit einem weiteren Problem ... eine Datei, die ich mit

      dir /b >dir.txt

      in einem deutschen Win10 in der CMD-Box erzeugt habe und die Dateinamen mit deutschen Umlauten enthält, gehen diese bei Benutzung von file("d:\\dir.txt") teilweise verloren, teileise werden "komische" Zeichen dargestellt ... in diesem Fall komme ich mit obigem Beispiel NICHT weiter.
      Ich muss PHP im Kontext Home Automation nutzen (Vorgabe Hersteller und nicht zu ändern). Da kommt es leider ggf. auf ms an. Deshalb manche "seltsame" Frage.

      Kommentar


      • #4
        Zitat von jwka61 Beitrag anzeigen
        Danke für den Hinweis. Das hatte ich in PHP.NET auch entdeckt, es hatte aber nicht geklappt.
        "hatte nicht geklappt" ist nichts womit wir irgendwas anfangen können, da wirst du schon etwas genauer werden müssen.

        in einem deutschen Win10 in der CMD-Box erzeugt habe und die Dateinamen mit deutschen Umlauten enthält, gehen diese bei Benutzung von file("d:\\dir.txt") teilweise verloren, teileise werden "komische" Zeichen dargestellt ... in diesem Fall komme ich mit obigem Beispiel NICHT weiter.
        Dann ist die ursprüngliche Codierung wohl nicht UTF-16LE sondern irgendwas anderes - du könntest aber versuchen vorher chcp 65001 einzugeben und damit die Ausgabe auf UTF-8 umzustellen.

        Kommentar


        • #5
          Danke nochmals in die Runde.

          Das "DIR.TXT" - Problem habe ich tatsächlich dadurch gelöst bekommen, dass ich den Befehl "CHCP 1250" voranstelle. Da ich die dir Dateien eh gerne sortiert habe, hab' ich mir ne kleine batch-Datei geschrieben, die wie alle meine anderen Batches über den Path erreichbar ist. Dort hab' ich das einfach vorangestellt.

          Das o.g. mit "hat nicht geklappt" bedeutet, dass ich die mb_xxx funktionen einfach nicht and laufen bekam. War auf eine sehr alte PHP Version zurück zu führen (5.4.4), habe das Problem nun so umschifft, dass ich ne kleine Klasse geschrieben habe, die mir alle diese Sonderzeihen entsprechend ersetzt. Was die Registry-Files angeht, habe ich mir auch ne Krücke gebaut und lese erst mal die Datei aus und lasse jedes 2. Zeichen einfach weg, den die von Windows geschriebenen Dateien sind wohl Multibyte-Dateien, die je Zeichen zwei Byte schreiben.

          Das Thema kann damit geschlossen werden.
          Ich muss PHP im Kontext Home Automation nutzen (Vorgabe Hersteller und nicht zu ändern). Da kommt es leider ggf. auf ms an. Deshalb manche "seltsame" Frage.

          Kommentar

          Lädt...
          X