Supponiamo che per qualche motivo perverso si voglia visualizzare il contenuto del byte grezzo di un UTF8String.Delphi 2009 RawByteString vagari
var
utf8Str : UTF8String;
begin
utf8Str := '€ąćęłńóśźż';
end;
(1) Questo non lo fa, viene visualizzata la forma leggibile:
memo1.Lines.Add(RawByteString(utf8Str));
// output: '€ąćęłńóśźż'
(2) Questo, tuttavia, non "lavoro" - nota la concatenazione:
memo1.Lines.Add('x' + RawByteString(utf8Str));
// output: 'x€ąćęłńóśźż'
Ho capito (1), anche se la coercizione forzata del compilatore a UnicodeString sembra impedire la visualizzazione di una variabile RawByteString come è. Tuttavia, perché il comportamento cambia in (2)?
(3) Ancora più strano - cerchiamo di invertire la concatenazione:
memo1.Lines.Add(RawByteString(utf8Str) + 'x');
// output: '€ąćęłńóśźżx'
Ho letto in sui tipi stringa diavolerie a Delfi e ho pensato ho capito come funzionano, ma questo è un puzzle .
Thans, Barry, questo ha senso.La concatenazione era solo un esperimento "cosa succede se premevo questo pulsante", niente di pratico. Strano però per vedere Delphi introdurre un comportamento indefinito come questo - non ce ne sono mai stati molti prima. –