Global $g_iZeile1 = 1 ; ABSICHTLICH Code in Zeile 1 - wird fuer Fall 2 (BOM-Test) gebraucht. Header siehe unten. ; !! Diese Datei MUSS als ANSI (Windows-1252) gespeichert bleiben - NICHT als UTF-8 !! ; Sie enthaelt absichtlich Umlaut-Bytes (0xE4/0xF6/0xFC), denn genau deren Behandlung wird ; hier getestet. Referenz ist die AutoIt-Runtime: Skripte OHNE BOM liest sie als ANSI, ; UTF-8/UTF-16 nur MIT BOM. au3Mythos dekodiert dagegen offenbar alles als UTF-8, verwirft ; invalide Bytes stillschweigend und entfernt ein BOM nicht - Folgen: Fall 1 bis 3. ; Fall 1: In ANSI-Dateien loescht der Analyzer alle Nicht-ASCII-Bytes ersatzlos. ; "�" und "�" sind zur Laufzeit zwei VERSCHIEDENE Case-Werte - der Analyzer liest beide ; als leeren String "" und meldet ein Duplikat, das im echten Code nicht existiert. Func Enc_UmlautCase($sChar) Switch $sChar Case "�" ; wird intern zu "" Return 1 Case "�" ; <-- au3Mythos: "Duplicate Case Value" fuer '""' (falsch: ae-Umlaut <> oe-Umlaut) Return 2 EndSwitch Return 0 EndFunc ; Beleg fuer die Byte-Loeschung: In der vom Analyzer erzeugten preprocessed_source.au3 ; steht statt "Gr��e" nur "Gre" - analysiert wird ein anderer String als ausgefuehrt. Func Enc_StringInhalt() Local $sGruss = "Gr��e" Return $sGruss EndFunc ; Fall 2: UTF-8 MIT BOM (das offizielle AutoIt-Unicode-Format!) - das BOM wird nicht ; entfernt, sondern als Zeichen der ersten Zeile behandelt und macht sie unsichtbar. ; Repro: KOPIE dieser Datei als "UTF-8 mit BOM" speichern, au3Mythos erneut laufen lassen: ; -> error: Variable '$g_izeile1' is referenced but is not declared ... (Zeile 1 kaputt) ; -> die Duplicate-Warnung aus Fall 1 verschwindet dafuer (Umlaute nun korrekt gelesen) Func Enc_NutztZeile1() Return $g_iZeile1 ; als ANSI: keine Meldung. Als UTF-8 mit BOM: "Undeclared Variable" EndFunc ; Fall 3: UTF-16 LE - stiller Schein-Erfolg auf ungelesener Datei. ; Repro: KOPIE dieser Datei als "UTF-16 LE" speichern, au3Mythos laufen lassen: ; -> "0 error(s), 0 warning(s)", Exit-Code 0 - die Datei wurde aber als NUL-Byte-Kette ; eingelesen und faktisch NICHT analysiert (preprocessed_source.au3 ansehen). ; Au3Check lehnt dieselbe Datei ab ("couldn't open input file", Exit-Code 3); ; die AutoIt-Runtime kann UTF-16-Skripte dagegen sogar ausfuehren. ; Das heißt, dass ein völlig fehlerhaftes, ausführbares Skript von au3mythos als ; "komplett sauber" bescheinigt wird.