Trotzdem ist das falsche Handling von Unicodestrings ziemlich sicher der Fehler:
Delphi-Quellcode:
SetLength(CompressedFile, InStream.Size);
InStream.Read(CompressedFile[0], InStream.Size);
Du hast einen Stream der Länge 400. Nun setzt du die Länge des Strings auf 400, sprich du hast dort 800 Byte in dem String. Dann packst du die 400 Byte aus der Datei in die ersten 200 Zeichen des Strings. Die anderen 200 Zeichen des Strings werden nicht beschrieben.
Was da ZDecompressStr draus macht, weiß ich nicht, aber sicher nix Gutes...