Umlaute aus ini Datei auslesen

  • Hallo zusammen,
    ich habe eine ini Datei, die ich mittels IniRead und IniReadSection auslese. Nun kommte es immer öfter vor, dass in dieser ini Datei Begriffe mit Umlauten (ä, ö, ü, ß) auftauchen. Wenn ich z.B. mittels IniReadSection eine ganze Sektion auslese und mir das Array anzeigen lasse, werden die Umlaute nicht korrekt angezeigt. Dementsprechend arbeitet das Programm dann ja mit diesen falschen Werten weiter.

    Ein Beispiel:
    In der ini Datei stehen in der Sektion "Alte Versionen" alte Word-, Excel- & Powerpoint-Vorlagen, die mal bei allen Usern verteilt wurden und nun nicht mehr gültig sind und gelöscht werden sollen:

    [Alte Versionen]
    1. = Übungsvorlage01.dotm
    2. = Heiße_Tips.potx
    ...

    AutoIt
    Dim $aLoeschListe = IniReadSection($sDateiConfig, "Alte Versionen")
    Dim sZielpfad = @AppDataDir & "\Microsoft\Templates\"
    For $i = 1 To $aLoeschListe[0][0]
    		Local $vDelError = FileDelete($sZielpfad & $aLoeschListe[$i][1])
    		If $vDelError = 1 Then
    			_FileWriteLog($sLog,"Datei gelöscht: " & $sZielpfad & $aLoeschListe[$i][1])
    		EndIf
    Next

    Danke für eure Hilfe
    :)

  • Hi,
    Umlaute funktionieren bei mir einwandfrei...

    AutoIt
    #include <Array.au3>
    IniWrite("test.ini","testsectionäöü","testkeyäöü","testvalueäöü")
    
    
    $b=IniReadSectionNames ( "test.ini" )
    _arraydisplay($b)
    
    
    $a=iniread("test.ini","testsectionäöü","testkeyäöü","default")
    MsgBox(262144, 'Debug line ~' & @ScriptLineNumber, 'Selection:' & @CRLF & '$a' & @CRLF & @CRLF & 'Return:' & @CRLF & $a) ;### Debug MSGBOX
  • Die ini Datei wurde mit Notepad++ erstellt und wird von einigen Leuten ergänzt (meist mit dem Windows Notepad). Ich habe schon probiert, in Notepad++ als Sprache MS-DOS-Stil einzustellen, bringt leider nichts.

    Kann ich denn eine neue ini Datei an meinem Rechner im richtigen "Format" erstellen, die dann einfach von den Leuten mit Notepad.exe geöffnet und ergänzt wird?

    Alternativ würde mir noch einfallen (analog zum Bsp. von Andy) ein kleines Zusatzprogramm mit GUI zu schreiben, in dem die Leute dann den Dateinamen mit Umlauten eintragen und das Zusatzprogramm das dann in die eigentliche ini schreibt.

  • Naja, sobald in einem "anderen" Format bzw. Codepage gespeichert wird, ist das doch relativ schnuppe. Wichtig ist, was mit Autoit eingelesen und dann entsprechend umgewandelt wird!
    Poste eine Beispiel-Notepad-Ini, und dann sehen wir weiter...

  • Guten Morgen!
    Ich wollte euch eben eine Beispiel Datei erstellen und dabei ist mir aufgefallen:

    1. Wenn ich eine neue, leere Datei mit N++ erstelle und als .ini abspeichere, ließt AutoIt die Umlaute falsch ein.
    2. Wenn ich für diese Datei in N++ dann unter Sprachen zwischen "MS-DOS-Stil" und "MS ini file" hin und her wechsle, die Umlaute wieder korrigiere, die beim Sprachenwechsel "zerschossen" werden, und die Datei wieder speichere, ließt AutoIt irgendwann die Umalute richtig ein. Nach welchem Schritt genau habe ich jetzt nicht ausprobiert, denn
    3. Wenn ich eine neue, leere Datei mit dem Windows Notepad erstelle und sie als ini-Datei abspeichere, ließt AutoIt die Umlaute sauber ein. Danach kann ich die Datei mit N++ bearbeiten/ergänzen und AutoIt ließt weiterhin alle Umlaute sauber ein.

    Also: Alles gut, Problem gelöst. ^^ Dann liegt das Problem wohl nicht an AutoIt, sondern an N++.

    Anbei noch die beiden ini Dateien für diejenigen, die es interessiert - test8.ini ist mit Windows Notepad erstellt und funktioniert super, test9.ini mit N++ und funktioniert nicht.

  • Also: Alles gut, Problem gelöst. Dann liegt das Problem wohl nicht an AutoIt, sondern an N++.

    Das Problem kann mit AutoIt gelöst werden:

    C
    #include <FileConstants.au3.>
    #include <Array.au3.>
    
    
    $sData=FileRead('Test9.ini')    ;Datei einlesen
    $hFile=FileOpen('Test9.ini',$FO_OVERWRITE+$FO_UNICODE )  ;im richtigen Format ein Handle zum schreiben eröffnen
    FileWrite($hFile,$sData)   ;in Datei schreiben
    FileClose($hFile)          ;Handle schliessen
    $aIni=IniReadSection('test9.ini','Alte Versionen')
    _ArrayDisplay($aIni)
  • Hallo autoBert und vielen Dank!
    Es klappt zwar mit der Datei aus dem Windows Notepad aber genau an so eine Lösung hatte ich gedacht, als ich auf das Problem gestoßen bin und den Thread hier verfasst habe.
    Das werde ich bestimmt mit einbauen, dann ist man auf der sicheren Seite :)