Also, was da passiert:
Dein String '‰PNG' wird als
Unicode interpretiert und dort ist das Promillezeichen U+2030.
Bevor die Software mit
Unicode kompiliert wurde, wurde der String vermutlich mit Windows-1252 kodierung gespeichert, sodass dort 0x89 stand.
Zitat:
Warum wird für das erste Zeichen FD FF eingelesen/in die Datei geschrieben?
Weil das ungültige UTF-8 Zeichen beim einlesen durch einen
REPLACEMENT CHARACTER ersetzt wird.
Lösung für das Ganze: Wirf die Strings an der Stelle raus, die haben da nix zu suchen. Die Magic number am Anfang der Datei ist (hexadezimal)
Code:
89, 50, 4e, 47, 0d, 0a, 1a, 0a
Einfach diese Bytes in ein Byte-Array schreiben und vergleichen. Zur Not kannst du das auch als 2 32bit Zahlen (Cardinal?) oder eine 64bit Zahl zusammenfassen.