假设出于某种不正当的原因想要显示UTF8String的原始字节内容。Delphi 2009 RawByteString变幻莫测
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 var原样。但是,为什么行为在(2)中改变?
(3)更奇怪的是 - 让我们反向串联:
memo1.Lines.Add(RawByteString(utf8Str) + 'x');
// output: '€ąćęłńóśźżx'
我已经在德尔福新奇的字符串类型读了,我想我明白他们是如何工作的,但是这是一个谜。
Thans,Barry,这很有道理。级联只是一个“如果我按下这个按钮”实验,没有任何实际价值。 奇怪的是,虽然看到德尔福引入了这样一个未定义的行为 - 从来没有很多这样的。 – 2009-01-31 19:22:23