Delphiアプリケーションで文字コードを指定してコンソール出力するには?
質問
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.