Umlaute nach IniRead() nicht kodiert

  • Hi zusammen,

    ich habe ein Programm, in dem man die Sprache einstellen kann. Dafür habe ich eine Lang.ini-Datei erstellt, in der verschiedene Werte abgespeichert sind, und aus der gelesen wird. Dort wurde korrekt zum Beispiel Wert=...schließen... eingegeben. Im Programm wird dann "...schließen..." ausgegeben. Man hat mir schon anderswo den Tipp gegeben, es läge an der Kodierung des Editors. Ich benutze das ISN AutoIt Studio. Übrigens funktioniert es problemlos, wenn ich "...schließen..." direkt in zum Beispiel die MsgBox eingebe. Kann mir jemand helfen? Danke schon einmal im Vorraus.

    LG

  • Schau mal ob dir das hilft...

    C
    ;~ #include <WinAPI.au3>     ; AutoIt Version <= 3.3.14.2
    #include <WinAPIConv.au3> ; AutoIt Version >= 3.3.14.3
    
    ConsoleWrite('> @AutoItVersion = ' & @AutoItVersion & '   @AutoItPID = ' & @AutoItPID & @CRLF & @CRLF)
    
    ConsoleWrite('! ...schließen...' & @CRLF)
    
    ;~ _WinAPI_WideCharToMultiByte ( $vUnicode [, $iCodePage = 0 [, $bRetNoStruct = True [, $bRetBinary = False]]] )
    ConsoleWrite(_WinAPI_WideCharToMultiByte('> ...schließen...', 65001) & @CRLF)
  • Man hat mir schon anderswo den Tipp gegeben, es läge an der Kodierung des Editors

    Ja, das ist ein typisches Problem bei ANSI und UTF Kodierungen in ini.-Dateien.

    Hintergrund :

    AutoIt verwendet für die Verarbeitung von .ini-Dateien Funktionen aus der Microsoft KERNEL32.DLL. IniRead nutzt meines Wissens die Funktion 'GetPrivateProfileString' (ggf. noch mit A am Ende :/).

    GetPrivateProfileString geht aber immer von einer ANSI (nicht verwechseln mit ASCII) Kodierung aus.

    Dies führt zu folgenden Fehlern :

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

    Das Byte Order Mark wird (im Editor nicht sichtbar) an den Anfang der Datei gestellt. Ist die erste Zeile der ini.-Datei eine Sektion, z.B. [Sektion1], dann wird das BOM davor 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.

    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

    Liest man die ersten Zeichen (Binary) aus oder verwendet einen Hex-Editor, läßt sich die Kodierung erkennen. Auch Notepad++ zeigt sie unten rechts an.

    Möglicherweise hilft ein Umkodieren !

    EDIT : ich sehe gerade, es sind bereits Lösungen eingegangen.

    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."