AutoIt und UNICODE (UTF-8) - Funktioniert nicht?

  • Hallo zusammen,

    AutoIt sollte doch eigentlich seit geraumer Zeit UNICODE beherrschen. Leider habe ich damit massive Probleme. Mir geht es speziell um das Lesen und Schreiben von Textdateien in UTF-8-Kodierung. Das erste Problem ist schon mal, dass AutoIt alles knallhart als ANSI behandelt, sobald sich in der Datei kein BOM (Byte Order Mark) befindet. Laut Spezifikation ist UTF-8 ohne BOM eigentlich jedoch ausdrücklich zulässig.

    Mit Hilfe des quelloffenen EmEditor habe ich jetzt allen Dateien per Kommandozeile ein UTF-8-BOM verpasst. Jetzt klappt auch das Lesen der Sonderzeichen richtig.

    Beim Schreiben gibt's dann aber noch massivere Probleme. Ich nutzte folgenden Code um eine solche Datei zu öffnen, den Text zu bearbeiten und neu zu schreiben:

    [autoit]


    $text = FileRead($file_path)
    ;... (irgendwelche Text-Operationen) ...
    FileOpen($file_path, 128+2) ;UTF-8 berücksichtigen und alten Inhalt löschen
    FileWrite($file_path, $text)
    FileClose($file_path)

    [/autoit]

    Das UNICODE-Flag bei FileOpen scheint AutoIt aber gar nicht zu interessieren, es schreibt anschließend trotzdem ganz normales ANSI und "füllt" das BOM-Byte einfach mit dem ersten Zeichen des Strings. Auch wenn ich versuchsweise eine neue Datei anlege und diese mit dem 128er-Flag öffne und Text reinschreibe ist das Ergebnis kein UTF-8 sondern ebenfalls nur ANSI.

    Egal was ich mache, AutoIt schreibt schlicht kein UNICODE. In der Hilfe zu den Flags zu FileOpen steht aber ganz klar "128 = Use Unicode UTF8 when writing text with FileWrite and FileWriteLine (default is ANSI)".

    Was läuft denn da falsch? Jemand eine Idee? ?(

    spyro

    2 Mal editiert, zuletzt von spyro (27. August 2008 um 14:21)

  • Hi,
    wie überprüfst du denn, ob die Datei richtig geschrieben wurde?
    Mega

    Hallo Xenobiologist,

    ich verwendete dazu Notepad++. Dort kann man sich die Kodierung einer Textdatei anzeigen lassen (und auch, ob sie einen BOM besitzt). Die Vorlage der Datei ist dort UTF-8 (inkl. BOM) die neue ist ANSI. Solche Dateien führen leider im späteren Verlauf bei mir zu einer Character Coding Exception da dort explizit UTF-8 verlangt wird. Ob die UTF-8-Dateien nun ein BOM enthalten oder nicht wäre mir prinzipiell eigentlich egal, allerdings erkennt AutoIt das UNICODE der Datei nicht falls das nicht der Fall ist.

    Auf gut Deusch: Ich suche eine Lösung um eine UTF-8-Datei mit AutoIt zu bearbeiten ohne die Kodierung zu schrotten. :rolleyes:

    spyro

  • Hallo nochmal,

    das Problem hat sich mittlerweile erledigt. Die Lösung:

    Die Zeile

    [autoit]

    FileOpen($file_path)

    [/autoit]

    führt direkt in das digitale Nirvana da hier nämlich ein FileHandle erzeugt wird, dass zunächst mal in eine Variable gesichert werden muss bevor man damit arbeiten kann. Alle weiteren Operationen müssen sich dann auf das ERGEBNIS dieser Zeile beziehen.

    Richtig wäre also

    [autoit]

    $text = FileRead($file_path)
    ;... (irgendwelche Text-Operationen) ...
    $file_handle = FileOpen($file_path, 128+2) ;UTF-8 berücksichtigen und alten Inhalt löschen
    FileWrite($file_handle, $text)
    FileClose($file_handle)

    [/autoit]

    Danke trotzdem.