Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

"Настройка функции Writeln в Delphi для корректного вывода Unicode-символов"

Delphi , ОС и Железо , Windows

Настройка функции Writeln в Delphi для корректного вывода Unicode-символов

Вопрос, который часто возникает среди разработчиков на Delphi, касается возможности вывода Unicode-символов с помощью стандартной функции Writeln. По умолчанию Writeln не поддерживает Unicode, что может привести к отображению непонятных символов в консоли. Однако, существуют способы убедить Writeln корректно обрабатывать Unicode-символы.

Пример проблемы

Рассмотрим пример программы на Delphi:

{$APPTYPE CONSOLE}
begin
  Writeln('АБВГДЕЖЅZЗИІКЛМНОПҀРСТȢѸФХѾЦЧШЩЪЫЬѢѤЮѦѪѨѬѠѺѮѰѲѴ');
end.

Вывод в консоли, использующей шрифт Consolas, будет следующим:

????????Z??????????????????????????????????????

В то время как функция WriteConsole из модуля Winapi.Windows успешно выводит Unicode-символы:

{$APPTYPE CONSOLE}
uses
  Winapi.Windows;
const
  Text = 'АБВГДЕЖЅZЗИІКЛМНОПҀРСТȢѸФХѾЦЧШЩЪЫЬѢѤЮѦѪѨѬѠѺѮѰѲѴ';
var
  NumWritten: DWORD;
begin
  WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), PChar(Text), Length(Text), NumWritten, nil);
end.

Вывод в этом случае будет корректным:

АБВГДЕЖЅZЗИІКЛМНОПҀРСТȢѸФХѾЦЧШЩЪЫЬѢѤЮѦѪѨѬѠѺѮѰѲѴ

Решение проблемы

Чтобы убедить Writeln корректно обрабатывать Unicode, можно использовать функцию SetConsoleOutputCP, которая устанавливает кодовую страницу вывода в консоль:

program Project1;
{$APPTYPE CONSOLE}
uses
  System.SysUtils,Windows;
const
  Text =  'АБВГДЕЖЅZЗИІКЛМНОПҀРСТȢѸФХѾЦЧШЩЪЫЬѢѤЮѦѪѨѬѠѺѮѰѲѴ';
var
  NumWritten: DWORD;
begin
  ReadLn;  // Убедимся, что шрифт Consolas выбран
  try
    WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), PChar(Text), Length(Text), NumWritten, nil);
    SetConsoleOutputCP(CP_UTF8);
    Writeln('АБВГДЕЖЅZЗИІКЛМНОПҀРСТȢѸФХѾЦЧШЩЪЫЬѢѤЮѦѪѨѬѠѺѮѰѲѴ');
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  ReadLn;
end.

После выполнения данной программы в консоли будет отображаться текст на кириллице.

Альтернативные подходы

Существуют и другие способы настройки вывода Unicode-символов. Например, использование функции WriteConsoleW, которая поддерживает UTF-16, или настройка процедуры AlternateWriteUnicodeStringProc для кастомизации поведения Writeln.

Заключение

Для корректного вывода Unicode-символов в консоль из программы на Delphi, можно использовать функцию SetConsoleOutputCP с кодовой страницей CP_UTF8. Это позволит Writeln корректно отображать символы в консоли, использующей шрифт, поддерживающий Unicode.

Создано по материалам из источника по ссылке.

Настройка функции `Writeln` в Delphi для корректного вывода Unicode-символов требует использования функции `SetConsoleOutputCP` с кодовой страницей `CP_UTF8`, чтобы обеспечить правильное отображение символов в консоли.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Windows ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 09:15:15/0.0059220790863037/0