在我们的遗留应用程序中,我们有许多类似的代码:
Writeln('Line 1');
Write('Line 2:', '_': 5);
在D2007下输出
Line 1
Line 2: _
正如所料。在XE6下,我得到了
Line 1
Line 2:? _
,请注意第2行中的无关问号。它由_WriteWChar明确添加,因为t.UTF16Buffer[0]
不为空。这反过来是因为Writeln写入t.MBCSBuffer[0]
(与t.UTF16Buffer[0]
重叠),但之后不会将其清除。
我的测试程序:
program WriteSpaceTest;
{$APPTYPE CONSOLE}
begin
Writeln('Line 1');
//TTextRec(Output).UTF16Buffer[0] := #0;
Write('Line 2:', '_': 5);
Readln;
end.
注释行是XE6的一种解决方法。我还可以通过编写类似
的内容来避免使用_WriteWChar
Write('Line 2:', ' _');
我想知道的:这是XE6中的错误吗?如果是这样,它是否在以后的版本中修复?如果我的clear-UTF16Buffer -around解决了什么问题,不知道吗?