我怎样才能使用Delphi 2009创建Unicode控制台应用程序?
如果我像这样做:
{$APPTYPE CONSOLE}
uses
SysUtils;
begin
writeln('öüğşç سيمانتت');
end.
我得到以下内容:
ougsc ???????
我怎样才能使用Delphi 2009创建Unicode控制台应用程序?
如果我像这样做:
{$APPTYPE CONSOLE}
uses
SysUtils;
begin
writeln('öüğşç سيمانتت');
end.
我得到以下内容:
ougsc ???????
Delphi 2009中的Writeln仍使用ANSI编码(见System TTextRec),但您可以使用UTF8Encode并调用SetConsoleOutputCP(CP_UTF8)更改控制台的输出编码为UTF-8。您还需要一个好的字体来实际显示Unicode字符。
我不确定这是否符合您的要求,但是您可以使用Windows API函数在所有32位Delphi版本中创建Unicode控制台应用程序。我刚刚尝试了Delphi 4:
program test;
{$APPTYPE CONSOLE}
uses
Windows;
var
s: WideString;
i: integer;
Written: Cardinal;
begin
SetLength(s, 80);
for i := 1 to 80 do
s[i] := WideChar(48 + i);
WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), PWideChar(s), 80, Written,
nil);
end.
我没有Delphi 2009来尝试在编辑器中输入Unicode字符串的工作方式...
@Kabrol:使用光栅字体集,我看不到这两个字符,但是使用Lucida Console,至少可以看到宽字符($11f) - "ğ"。
请参见"仅对Unicode字体有效的SetConsoleOutputCP",以及"控制台参考"中有关控制台API函数的描述。
Windows控制台无法显示Unicode字符,因此请尝试将输出发送到文件中:
my_app.exe > unicode_file.txt
并尝试使用好的文本编辑器查看unicode_file.txt文件。
SetConsoleOutputCP(CP_UTF8)
针对这个RTL修复,您需要进行一些巧妙的代码挂钩。我已经完成了这个过程,我的一个同事正在忙于撰写一篇关于此的文章。一旦它在线上可用,我会发布链接。
干杯!