Предположим, что по какой-то извращенной причине вы хотите отобразить необработанное содержимое байта строки UTF8.
var
utf8Str : UTF8String;
begin
utf8Str := '€ąćęłńóśźż';
end;
(1) Это не так, отображается читаемая форма:
memo1.Lines.Add( RawByteString( utf8Str ));
// output: '€ąćęłńóśźż'
(2) Это, однако, "работает" - обратите внимание на конкатенацию:
memo1.Lines.Add( 'x' + RawByteString( utf8Str ));
// output: 'x€ąćęłńóśźż'
Я понимаю (1), хотя принудительное приведение компилятора к UnicodeString, по-видимому, препятствует отображению переменной RawByteString как есть. Однако почему поведение меняется в (2)?
(3) Еще страннее - давайте изменим конкатенацию:
memo1.Lines.Add( RawByteString( utf8Str ) + 'x' );
// output: '€ąćęłńóśźżx'
Я читал о новомодных типах строк в Delphi и думал, что понял, как они работают, но это загадка.