Supongamos que por algún motivo perverso desea mostrar el contenido de bytes sin formato de un UTF8String.Delphi 2009 caprichos de RawByteString
var
utf8Str : UTF8String;
begin
utf8Str := '€ąćęłńóśźż';
end;
(1) Esto no hace, se muestra la forma legible:
memo1.Lines.Add(RawByteString(utf8Str));
// output: '€ąćęłńóśźż'
(2) Esto, sin embargo, no "trabajo" - cuenta la concatenación:
memo1.Lines.Add('x' + RawByteString(utf8Str));
// output: 'x€ąćęłńóśźż'
Entiendo (1), aunque la coerción forzada del compilador a UnicodeString parece evitar la visualización de una var RawByteString como es. Sin embargo, ¿por qué cambia el comportamiento en (2)?
(3) extraño aún - vamos a revertir la concatenación:
memo1.Lines.Add(RawByteString(utf8Str) + 'x');
// output: '€ąćęłńóśźżx'
He estado leyendo sobre los tipos de cadenas novedosos en Delphi y creía comprender cómo funcionan, pero esto es un rompecabezas .
Thans, Barry, eso tiene sentido.La concatenación fue solo un experimento de "qué pasaría si presiono este botón", nada de valor práctico. Aunque es extraño ver a Delphi introducir un comportamiento indefinido como este, nunca antes había muchos. –