Kodierung von INI Datei beim speichern ändern ?

  • Hallo,

    mit autoit bestücke ich eine bestehende INI Datei. Da diese INI jedoch in ANSI Kodierung gespeichert ist, wir Sie aber im UTF-8 Format brauchen, wäre es schön, wenn es hier eine Möglichkeit zum "umspeichern" gibt.

    Gruss Hassan

    Einmal editiert, zuletzt von HassanMullah (20. Januar 2011 um 14:53)

  • Hallo Sprenger120,

    sorry das ich mich erst jetzt melde, hatte einiges um die Ohren.

    Ich habe jetzt mal einen ersten Versuch gemacht, der aber gründlich in die Hosen ging. Am besten ich zeige Euch mal was ich mache, bzw. was ich dann fehlerhaft raus bekomme.

    Von unserem Java Connector bekommen wir Daten von unserem Java Portal. Diese müssen in eine lokale Win32 Anwendung übertragen werden. Dann kommt eine Änderung in der Win32 Anwendung. Danach müssen diese Änderungen via Java Connector in das Java Portal. Den Step mit der Win32 Anwendung übernimmt Autoit. Als Datenaustausch verwenden der Java Connector und Autoit eine INI Datei, die immer das aktuelle Datum als Dateinamen hat, also am 20. Januar 2011 wäre das dann 20110120.ini

    Der Erzeuger der INI Datei ist der Java Connector. Zu diesem Zeitpunkt ist es noch eine INI Datei mit ANSI Kodierung. Beim Übertragen vom Java Connector zum Java Portal wird das jedoch in UTF-8 erwartet, d.h. was im ANSI INI File ein "Ü" ist, kommt dann am Ziel als "?" an ;(

    [Blockierte Grafik: http://www.hasenmueller.de/files4forum/pics4forum_20.png]

    Wir haben Testweise folgendes gemacht. Der Java Connector hat das INI File erzeugt. Dann habe ich mit Notepad++ der Inhalt in die Zwischenablage kopiert, das File geschlossen, eine neue Datei mit UTF-8 ohne BOM Kodierung geöffnet, den Inhalt aus der Zwischenablage reinkopiert und das ganze als 20110120.ini wieder gespeichert.

    Öffne ich das INI File nochmals mit Notepad++ öffne, sehe ich rechts unten, das die Kodierung UTF-8 ohne BOM ist. Wenn man dann via Autoit die Änderungen in diese INI File schreibt, haben wir wieder ein ANSI INI File :cursing:

    Hier mal meine orginal Funktion:

    [autoit]

    Func _func_write_ini($var_local_ini_file, $var_local_ini_sektion, $var_local_ini_key, $var_local_OUT_WERT); mit Übergabe an die Lokalen Variablen
    IniWrite($var_local_ini_file, $var_local_ini_sektion, $var_local_ini_key, $var_local_OUT_WERT); Zurückschreiben des jeweiligen Wertes in den Schlüssel einer Sektion
    EndFunc ;==>_func_write_ini

    [/autoit]

    und hier mal modifizert - was aber nicht geht:

    [autoit]

    Func _func_write_ini($var_local_ini_file, $var_local_ini_sektion, $var_local_ini_key, $var_local_OUT_WERT); mit Übergabe an die Lokalen Variablen
    IniWrite($var_local_ini_file, $var_local_ini_sektion, $var_local_ini_key, $var_local_OUT_WERT); Zurückschreiben des jeweiligen Wertes in den Schlüssel einer Sektion
    $varINIOpen = FileOpen($var_local_ini_file, 256)
    $varINIRead = FileRead($varINIOpen)
    FileWrite($var_local_ini_file, $varINIRead)
    EndFunc ;==>_func_write_ini

    [/autoit]

    Bevor ich das INI File beschreibe, sieht es so aus:

    Danach sieht es so aus:

    Spoiler anzeigen

    Die Datei ist zu diesem Zeit IMMER noch ANSI Kodiert!

    Die Sektion in der INI Datei sollte 1 mal vorhanden sein, nicht zig mal.

    Jetzt bin ich mal auf Eure Antworten gespannt, wie ein Flitzebogen :D

    Gruss Hassan

  • Neue Erkenntnis :D

    Habe im Forum ein wenig nach ähnlichen Problemen gesucht und jetzt bin ich der Sache schon etwas näher

    Hier mal die neue Funktion:

    [autoit]

    Func _func_write_ini($var_local_ini_file, $var_local_ini_sektion, $var_local_ini_key, $var_local_OUT_WERT); mit Übergabe an die Lokalen Variablen
    IniWrite($var_local_ini_file, $var_local_ini_sektion, $var_local_ini_key, $var_local_OUT_WERT); Zurückschreiben des jeweiligen Wertes in den Schlüssel einer Sektion
    $textuisystem_handle = FileOpen($var_local_ini_file, 256)
    $textuisystem_final_handle = FileOpen($var_ini_utf8_file, 258)
    $line = 0
    While 1
    $textuisystem_contents = FileReadLine($textuisystem_handle, $line)
    If @error = -1 Then ExitLoop
    FileWrite($textuisystem_final_handle, $textuisystem_contents & @CRLF)
    $line += 1
    WEnd
    FileClose($textuisystem_handle)
    FileClose($textuisystem_final_handle)
    FileDelete($var_local_ini_file)
    FileCopy($var_ini_utf8_file, $var_local_ini_file, 9)
    EndFunc ;==>_func_write_ini

    [/autoit]

    Das entsprechende INI File sieht in Notepad++ jetzt so aus:

    [Blockierte Grafik: http://www.hasenmueller.de/files4forum/pics4forum_21.png]

    Im Klartext soll das so sein:

    OUT_KFZ=SÜD-ÄÖß

    In der eigentlichen Anwendung, also das Ziel, sieht es dann so aus.

    [Blockierte Grafik: http://www.hasenmueller.de/files4forum/pics4forum_22.png]

    Warum kommt das jetzt immer noch so komisch an ?

    Nachtrag:
    Abgesehen davon das die Kodierung noch nicht passt, habe ich noch ein weiteres Problem. Die INI Datei ist ja - wie man am Datum erkennen kann - jeweils 1 Tag gültig, d.h. am nächsten Tag gibt es eine neue Datei.

    Die INI Datei pro Tag füllt sich aber um einige Sektionen. Ab dem 2. Sektionseintrag will Autoit dann eine "ANSI as UTF8" Datei in eine "ANSI as UTF8" Datei wandeln. Was dabei rauskommt, kann sich jeder selbst denken :thumbdown:

    Gruss Hassan

    Einmal editiert, zuletzt von HassanMullah (20. Januar 2011 um 13:18) aus folgendem Grund: Nachtrag hinzugefügt

  • Also mit folgender Funktion geht es jetzt bei mir:

    [autoit]

    Func _func_write_ini($var_local_ini_file, $var_local_ini_sektion, $var_local_ini_key, $var_local_OUT_WERT); mit Übergabe an die Lokalen Variablen
    IniWrite($var_local_ini_file, $var_local_ini_sektion, $var_local_ini_key, $var_local_OUT_WERT); Zurückschreiben des jeweiligen Wertes in den Schlüssel einer Sektion
    $textuisystem_handle = FileOpen($var_local_ini_file, 16)
    $textuisystem_final_handle = FileOpen($var_ini_utf8_file, 266)
    $line = 0
    While 1
    $textuisystem_contents = FileReadLine($textuisystem_handle, $line)
    If @error = -1 Then ExitLoop
    FileWrite($textuisystem_final_handle, $textuisystem_contents & @CRLF)
    $line += 1
    WEnd
    FileClose($textuisystem_handle)
    FileClose($textuisystem_final_handle)
    FileDelete($var_local_ini_file)
    FileCopy($var_ini_utf8_file, $var_local_ini_file, 9)
    EndFunc ;==>_func_write_ini

    [/autoit]


    Gruss Hassan