Hallo zusammen,
in der Datei, die ich mit einem
TFileStream auslesen will, stehen Multibyte-/
Unicode-Strings. D.h. alle Zeichen werden mit zwei Bytes kodiert. D.h. ich habe zum Beispiel folgenden Text in der Datei stehen (Hex-Code):
Code:
00 00 00 05 00 65 00 6E 00 2D 00 55 00 53
Die ersten vier Bytes geben mir die Länge des Strings an (i.e. 5 Zeichen). Dann folgen 10 Bytes (5 * 2 Bytes), die ich auslesen will.
Im Code sieht das jetzt bei mir so aus:
Delphi-Quellcode:
fs.Read(bufSize, 4); bufSize := ChangeEndian32(bufSize);
wbuf := StringOfChar(#00, bufSize*2);
fs.Read(wbuf[1], bufSize*2);
writeln('Locale: ', wbuf);
Dabei ist
wbuf vom Typ
WideString. Die Ausgabe ist dummerweise nur
Verwende ich
UTF8String statt
WideString bekomme ich immerhin eine Ausgabe. Die sieht jedoch so aus, als ob das zweite Byte nicht interpretiert wird (die Leerzeichen sind das Problem):
Kann das Problem im
WideString-Fall damit zusammenhängen, dass die Datei im Big Endian-Format gespeichert ist oder bezieht sich das nur auf die Zahlwerte?
Wenn ja, wie kann ich geschickt einen String "umdrehen"? Meine
ChangeEndian32-Routine (aus der Code-Lib übrigens) dreht nur
DWORD-Werte um.
Gruß
Christopher