FFFE aus Datei auslesen (beide Byte am Anfang)

  • FFFE fehlt.

    Weil....es....nicht....da....ist!

    Wie viele Bytes beinhaltet die Datei?
    Und nicht mit irgendwelchen Programmen/HexEditoren auslesen (die man übrigens bedienen können sollte) sondern einfach aus dem Explorer die Dateieigenschaften.
    Die beiden Dateien bestehen aus:

    https://autoit.de/index.php/Atta…atei-UTF-8-txt/
    0x6D757374657264617465695F5554462D382E7478740D0AC3A4C3B6C3BC270D0A 32 bytes
    der erste Teil ist ANSI
    0x6D757374657264617465695F5554462D382E747874 -> musterdatei_UTF-8.txt
    dann folgen 0D0A -> CRLF
    dann die ANSI-Zeichen C3A4C3B6C3BC27 -> äöü' , interpretierbar als UTF8 ->äöü'
    gefolgt von einem weiteren 0D0A -> CRLF

    https://autoit.de/index.php/Atta…datei-ANSI-txt/
    0x6D757374657264617465695F414E53492E7478740D0AE4F6FC270D0A 28 bytes
    0x6D757374657264617465695F414E53492E747874 -> musterdatei_ANSI.txt
    dann folgen 0D0A -> CRLF
    dann die ANSI-Zeichen E4F6FC27 -> äöü'
    gefolgt von einem weiteren 0D0A -> CRLF


    @AspirinJunkie,
    *whispermode ON* schau mal geschwind nach, was binarytostring($text) aus $text="0x656667" macht ;) *whispermode OFF*

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (18. August 2015 um 16:57)

  • "efg" - ist doch auch korrekt oder hab ich was übersehen?

    Ja, lass dir das Ergebnis von binary("0x656667") ausgeben ;) *hust*

    Die "Überraschung" war doch, dass FileRead() aus einer mit Text gefüllten Datei "automatisch" UTF8 dekodiert, auch wenn ich das garnicht haben möchte!
    Meine Intention mit dem Filewrite(binarytostring("0x67520A...")) war, beim Schreiben in die Datei die eventuell auch automatisch erfolgende "Umformung" von Text in UTF8 zu vermeiden.
    Ich arbeite sehr viel mit Textdateien und auch mit Binärfiles, sowohl schreibend als auch lesend, aber dieses Verhalten von Fileread ist mir noch nicht untergekommen...

    Richtig übel wird das, wenn in bspw. Config/Ini-Files "zufällig" valide UTF8-Kodierungen enthalten sind, welche dann als gänzlich andere Daten gelesen werden.
    Wenn ich in einer Textdatei äöü' enthalten habe, dann hat das auch von FileRead() so ausgelesen zu werden und nicht als äöü'

  • Eigentlich sollte die Problematik nur bei ANSI-kodierten Dateien auftauchen.
    Wenn man in einer Datei die Zeichenfolge äöü' hat, dann hat man keine ASCII-Datei mehr sondern mindestens ANSI.
    Heißt die Zeichenkette muss also in der entsprechenden Kodierung vorliegen.
    Wenn die Datei UTF-X kodiert ist, ist alles fein - beim Auslesen wird die Kodierung von AutoIt korrekt erkannt und auch so eingelesen wie es in der Datei gemeint ist.
    Bei ANSI hingegen kann die automatische Kodierungserkennung die Datei nicht als ANSI-Datei erkennen sondern nimmt stattdessen UTF-8 an und liest die Datei auch entsprechend aus.

    Wie soll AutoIt auch ANSI korrekt erkennen wenn eine ANSI-Datei mit äöü' als Inhalt binär vollkommen equivalent ist zu einer UTF-8 (ohne BOM)-Datei mit dem Inhalt äöü'.
    Woran könnte man exakt festmachen, dass eine Datei mit dem Binärinhalt C3A4C3B6C3BC27  nun eine ANSI-Datei mit dem Inhalt äöü' ist oder eine UTF-8-Datei mit dem Inhalt äöü'?
    Es geht leider einfach nicht.
    Da kann man den Devs noch so lange auf den Hut hauen...
    Wenn es sich um eine ANSI-Datei handelt gibt es nur den Ausweg sie explizit als ANSI-Datei zu öffnen.

    Mal zum Spielen:


    @supernova
    Thema also gelöst? - schön
    Darf man fragen was das eigentliche Ziel hinter der Frage war?
    Wolltest du die Dateikodierung einer Datei herausfinden?