Verständnisfrage zu "INI-Datei Keys, die mit vera beginnen"

  • Ich bin da auf etwas zumindest für mich sehr skurriles gestoßen.

    Ich möchte in der INI-Datei unter anderem Pfade zu einem Programm deklarieren. Komischerweise bekomme ich return-Fehler, wenn die Keys in der INI-Datei mit "Vera" beginnen.

    Code
    ;; INI Datei
    
    [VeraCrypt]
    VeraCryptPath = C:\Programme (portable)\+ ..... System & Utilities\+ ..... Dateien & Ordner\VeraCrypt\VeraCrypt-x64.exe
    AutoIt
    $VeraCryptPath = IniRead($FileSettings, "VeraCrypt", "VeraCryptPath", "0")

    Ist "Vera" irgendwie geschützt? Ich mein, da muss man auch erst mal drauf kommen - hab ne gute Ewigkeit lang rumgespielt um einen Fehler zu finden, den es in meinem Verständniss so gar nicht gibt :party1:

    Einmal editiert, zuletzt von Slevin (29. Mai 2018 um 03:42)

  • Irgendwie scheint da wohl auch noch die Zeichenkodierung der INI-Datei mitzuspielen. Hab die INI komplett neu in ANSI erstellt und jetzt gehts erst mal.

    Ich werd das weiter verfolgen, aber komisch, dass das nur Keys passiert, die mit "Vera" beginnen...

  • Hallo Slevin !

    Mal etwas zum technischen Hintergrund :

    AutoIt verwendet für die Verarbeitung von .ini-Dateien verschiedene Funktionen aus der Microsoft KERNEL32.DLL (quasi als eine Art Wrapper), z.B. 'GetPrivateProfileString'.

    'GetPrivateProfileString' geht aber immer von einer ANSI (nicht verwechseln mit ASCII) Kodierung aus (Anm.: ANSI enthält deutsche Sonderzeichen).

    Dies kann zu folgenden Fehlern führen :

    - .ini-Dateien mit Byte Order Mark (BOM) :

    Das Byte Order Mark wird (in vielen Editoren nicht sichtbar) an den Anfang der Datei gestellt. Ist die erste Zeile der ini.-Datei eine Sektion, z.B. [Sektion1], dann wird das BOM vor [Sektion1] eingefügt.

    -> Folge : 'GetPrivateProfileString' erkennt diese Zeile nicht mehr als gültige Sektion an, und zugehörige Key/Values werden ignoriert (analog, wenn erste Zeile eine Key/Value-Zeile ist).

    - Umlaute in UTF kodierten .ini-Dateien werden falsch dargestellt.

    Nur zur Info : BOM Byte-Header

    Hex : EF BB BF (Dezimal : 239 187 191) -> UTF-8

    Hex : FF FE (Dezimal : 255 254) -> UTF-16 Little Endian

    Hex : FE FF (Dezimal : 254 255) -> UTF-16 Big Endian

    Die Kodierung steht bei Notepad++ z.B. rechts unten in der Statusleiste, oder in Menüleiste -> Kodierung.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Hallo Slevin - Nachtrag :

    Ich habe verschiedene Varianten durchprobiert, konnte aber keine Besonderheiten bzgl. der Zeichenfolge Vera feststellen (warum auch ;) ?).

    Solange die ini.-Datei ANSI kodiert ist und der Pfad syntaktisch korrekt angegeben wird, funktioniert es !

    EDIT (um es ganz genau zu benennen) :

    AutoIt verwendet die ANSI-Version der API-Methode mit Namen 'GetPrivateProfileStringA'


    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

    Einmal editiert, zuletzt von Musashi (29. Mai 2018 um 09:14) aus folgendem Grund: Info spezifiziert

  • Vielen Dank @Musashi für die Hintergrundinformationen.

    Es scheint wohl daran gelegen zu haben, dass die INI-Datei irgendwie *zwitterhaft* war. Ich hatte die Pfadangaben aus DOpus (Explorer-Ersatz) kopiert. Als es dann Probleme gab, hatte ich die INI in UTF-8 konvertiert. Und ab da war dann nix mehr nachvollziehbar, bis auf dass es mit "vera" besonders lustig wurde. Da es allerdings, aus welchem Grund auch immer, nicht ständig Probleme gab, es also hie und da auch mal funktionierte, kam ich erstmal natürlich nicht auf die Idee, dass es an der Codierung liegen könnte.

    Alles klar, und danke für die Infos.