Writeln后跟_WriteWChar打印问号

时间:2017-01-05 14:59:22

标签: delphi delphi-2007 delphi-xe6

在我们的遗留应用程序中,我们有许多类似的代码:

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解决了什么问题,不知道吗?

0 个答案:

没有答案