Delphiアプリケーションで文字コードを指定してコンソール出力するには?

提供: Support
移動先: 案内検索

質問

Delphi2009で作成したコンソールアプリケーションのプロジェクトを、例えばDelphi 11などの最近のバージョンへ移行しています。移行中のプロジェクトでは、以下のコードのようにWritelnでコンソール出力するプログラムを記述しています。

uses
  SysUtils;

begin
  try
    Writeln('Content-type: text/html; charset="UTF-8"');
    Writeln('');
    Writeln('<!DOCTYPE html>');
    Writeln('<html lang="ja">');
    Writeln('<head>');
    Writeln('<meta charset="UTF-8" />');
    Writeln('</head>');
    Writeln('<body>');
    Writeln(‘日本語文字列テスト’);
    Writeln('</body>');
    Writeln('</html>');
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.

上記のコードを実行すると、Delphi 2009では、UTF8でコンソールへ出力されましたが、最近のDelphiのバージョンでは、ANSI形式でコンソールに出力されます。


UTF8でコンソール出力するには、どうすれば良いですか?


解決

Delphiアプリケーションで、文字コードを指定してコンソール出力するには、SetTextCodePage関数を使用してください。


例えば、UTF8でコンソール出力するコード例は以下の通りです。

uses
  SysUtils,Winapi.Windows;

begin
  try
    SetTextCodePage(Output, CP_UTF8);
    Writeln('Content-type: text/html; charset="UTF-8"');
    Writeln('');
    Writeln('<!DOCTYPE html>');
    Writeln('<html lang="ja">');
    Writeln('<head>');
    Writeln('<meta charset="UTF-8" />');
    Writeln('</head>');
    Writeln('<body>');
    Writeln(‘日本語文字列テスト’);
    Writeln('</body>');
    Writeln('</html>');
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.