假设由于某种扭曲的原因,您想要显示UTF8String的原始字节内容。
var
utf8Str : UTF8String;
begin
utf8Str := '€ąćęłńóśźż';
end;
(1) 这不行,它显示可读形式:
memo1.Lines.Add( RawByteString( utf8Str ));
// output: '€ąćęłńóśźż'
(2) 然而,这里确实“有效” - 请注意连接操作:
memo1.Lines.Add( 'x' + RawByteString( utf8Str ));
// output: 'x€ąćęłńóśźż'
我理解(1),尽管编译器强制将RawByteString转换为UnicodeString可能会阻止原样显示变量。但是,为什么行为在(2)中发生了改变呢?
(3) 更奇怪的是 - 让我们反转拼接:
memo1.Lines.Add( RawByteString( utf8Str ) + 'x' );
// output: '€ąćęłńóśźżx'
我一直在研究Delphi中的新型字符串类型,觉得自己已经理解了它们的工作原理,但是这个问题令我感到困惑。