TXT im UTF-8/Unicode-Format auslesen und schreiben

  • Hallo Leute,
    Ich will endlich AutoIt lernen um so mir eigene Programme zu schreiben.
    Nun bin ich auf das erste Problem gestoßen und hoffe, dass Ihr mir helfen könnt :))

    Also, ich habe eine Text-Datei im UTF-8-Format, das asiatische Zeichen enthält.
    Diese Datei möchte ich auslesen, und eine Zeichenkette zwischen zwei bestimmten Strings finden und diese Zeichenkette in eine neue Datei schreiben

    [autoit]


    #include <array.au3>
    #include <string.au3>

    [/autoit][autoit][/autoit][autoit]

    ; OPEN: File
    $vOPEN = FileOpen("vSourceCode.txt")

    [/autoit][autoit][/autoit][autoit]

    ; READ: vOPEN
    $vREAD = FileRead($vOPEN)

    [/autoit][autoit][/autoit][autoit]

    ; GET: String Between
    $vBETW = _StringBetween($vREAD, "<title>", "</title>")

    [/autoit][autoit][/autoit][autoit]

    ; CONVERT: Array to String
    $vBETW = _ArrayToString($vBETW)

    [/autoit][autoit][/autoit][autoit]

    ; WRITE: String to File
    FileWrite("vResult.txt", $vBETW)

    [/autoit]

    Leider ist die neue Datei (vResult.txt) eine ANSI und die Sonderzeichen sind nur noch "???"

    Laut dieser Seite: https://autoit.de/dokumentation_…ns/FileOpen.htm
    sollte es mit dem Flag Nummer 16 klappen.

    [autoit]

    ; OPEN: File
    $vOPEN = FileOpen("vSourceCode.txt", 16)

    [/autoit]


    Leider steht in der erstellten Datei aber nur -1.

    Wo liegt mein Fehler?
    Danke für eure Hilfe :)

  • hi kaesereibe
    ich habe natürlich alle Zahlen ausprobiert, auch 128.
    Es kommen immer noch ??? Zeichen heraus.

    Wenn ich den Text nicht editiere und direkt ausgebe, sind die Zeichen korrekt:
    Es muss aber immer eine Zahl + 16 sein. Also 16, oder 80, 272 usw.
    Es scheint am _StringBetween zu liegen... :(

    [autoit]

    #include <array.au3>
    #include <string.au3>

    [/autoit][autoit][/autoit][autoit]

    ; OPEN: File
    $vOPEN = FileOpen("vSourceCode.txt", 16)

    [/autoit][autoit][/autoit][autoit]

    ; READ: vOPEN
    $vREAD = FileRead($vOPEN)

    [/autoit][autoit][/autoit][autoit]

    ; GET: String Between
    ;$vBETW = _StringBetween($vREAD, "<title>", "</title>")

    [/autoit][autoit][/autoit][autoit]

    ; CONVERT: Array to String
    ;$vBETW = _ArrayToString($vBETW)

    [/autoit][autoit][/autoit][autoit]

    ; WRITE: String to File
    FileWrite("vResult.txt", $vREAD)

    [/autoit]
  • Hallo Leute,
    ich habe per Zufall die Lösung hier gefunden:
    Man braucht garkein FileOpen, sondern man muss lediglich StringToBinary anwenden...

    Ich hab zwar keine Ahnung warum das so ist, aber es klappt :)
    Vielen Dank an alle

    [autoit]

    ; READ: TXT-File
    $vREAD = FileRead("vSourceCode.txt")

    [/autoit][autoit][/autoit][autoit]

    ; GET: String Between
    $vBETW = _StringBetween($vREAD, "<title>", "</title>")

    [/autoit][autoit][/autoit][autoit]

    ; CONVERT: Array to String
    $vBETW = _ArrayToString($vBETW)

    [/autoit][autoit][/autoit][autoit]

    ; CONVERT: String to Binary
    $vBETW = StringToBinary($vBETW, 4)

    [/autoit][autoit][/autoit][autoit]

    ; WRITE: Binary to File
    FileWrite("vResult.txt", $vBETW)

    [/autoit]