Zitat von
fkerber:
Auch nach regem Bemühen ist es Matze und mir leider nicht gelungen, wirklich den Code nachvollziehen zu können. Natürlich wollen wir den Code deswegen nicht "wegwerfen" - nur weil wir ihn nicht verstehen
Aus diesem Grund wäre es prima, wenn jemand näher erläutern könnte, was genau gemacht wird.
Vor allem folgende Fragen haben sich mir gestellt:
- Warum ist in beiden Fällen der Ein- und Ausgabetyp "ansistring"
- Was genau kann man mit dem Code machen? Für welche Fälle wäre er produktiv nutzbar?
Tja, das ist genau eine Frage, die sich jeder stellen sollte. Warum ist Ein- und Ausgabe AnsiString. Weil AnsiString eigentlich ProZeichen1ByteString heißen sollte und der WideString ProZeichen2ByteString. Die Namensgebung in Delphi hat keinerlei, aber wirklich keinerlei Auswirkung auf diese Dinge. Bekanntlich kann man bequem einen UTF-8-kodierten String in einer AnsiString-Variablen ablegen, weil es da eben keinen Zusammenhang zwischen dem Namen (AnsiString) und der Funktion (abspeicher von Strings aus Zeichen mit 1 Byte pro Zeichen) gibt. Man nimmt fälschlicherweise anhand des Namens an, daß der String immer
ANSI-Zeichen beherbergen muß, dabei ist
ANSI ja nur eine Kodierung, die wie viele andere Kodierungen bestimmte Zeichen in einen 8bit-Zeichensatz quetscht.
Die Funktionen OemToChar und CharToOem machen nichts weiter, als bestimmte Zeichenwerte (
ord) in
ANSI-Kodierung auf die OEM-Kodierung abzubilden. So daß der Buchstabe Ü beispielsweise immer als Ü
angezeigt wird, auch wenn dies auf der Konsole geschieht, welche meist die OEM-Kodierung benutzt, während der Quelltext eines Delphiprogramms üblicherweise in
ANSI-Kodierung abgespeichert wird.