RawByteString ist doch nur ein Alias für AnsiString?
Wobei mich das wundert. Ich dachte AnsiString ist in neueren Versionen genau das, was in füheren Versionen String war?
String war früher ein Alias für den AnsiString
und jetzt ist es ein Alias für den UnicodeString.
Genauso, wie früher (vor Win64) der Integer ein Alias für den LongInt (
Win32) und davor für den SmallInt (Win16) war, also das, was jetzt der NativeInt ist, da man bescheuerter Weise den Integer eingefrohren hat. (aus Angst vor Problemen bei der Umstellung auf 64 Bit, aufgrund von schrottig programmierten Codes)
Ein AnsiString ist mit der akuellen Codepage des Systems/Programms (CP_ACP),
RawByteString ist ein AnsiString ohne CodePage,
UTF8String ist ein AnsiString mit der CodePage CP_UTF8
und AnsiString(123) hat die CodePage 123.
Der ShortString ist immer CP_ACP. (das ist ein Rerord und kein Long-String, so wie UnicodeString, AnsiString und Co.)
Und ja, Delphi konvertiert die Strings untereinander.
Wenn man einen UnicodeString an einen UTF8String übergibt, dann wird der Inhalt nach UTF-8 konvertiert, also anhand der CodePage des AnsiString.
Umgekehrt genauso.
Darum gibt es auch den RawByteString, da dieser die "
ANSI"-Zeichen, im unteren Byte-Bereich (0 bis 255) des
Unicode 1:1 kopiert, ohne zu übersetzen.