您所得到的字符串是包含不可打印字符的有效表示。但是,在使用字符串列表或
StringChangeEx
函数时,您不需要担心会丢失任何字符。请看以下简短的脚本,让我来说服您:
[Code]
const
PrintableString = 'string-string-string-string';
NonPrintableString = 'string'#10#9#9#9'string'#10#9#9#9'string'#10#9#9#9'string';
procedure InitializeWizard;
var
S: string;
StringList: TstringList;
begin
StringList := TstringList.Create;
try
StringList.Add(NonPrintableString);
S := StringList[0];
if S = NonPrintableString then
MsgBox('String list didn''t lose non printable chars!', mbInformation, MB_OK);
StringChangeEx(S, #10#9#9#9, '-', True);
if S = PrintableString then
MsgBox('String has been modified as expected!', mbInformation, MB_OK);
finally
StringList.Free;
end;
end;
然而,我认为你之所以提出这个问题,是因为你想向用户展示这些数据,但是非可打印字符可能会让这变得有时候困难。举一个例子,如果你有一个包含空终止符的字符串,并且你想将这个字符串显示给用户,例如在消息框中,你只会看到这个终止符之前的部分。但是,这不是你能够控制的。这是由于Windows API函数调用对待字符串的方式决定的。
[Code]
procedure InitializeWizard;
var
S: string;
begin
S := 'Hello'#0' world!';
MsgBox(S, mbInformation, MB_OK);
end;
正如您所看到的,对于上述情况,需要用可打印字符(例如空格)替换空终止符字符。