Согласие на обработку персональных данных.

17.06.2018
Новая статья Преобразование десятичного числа в шестнадцатеричное.

12.06.2018
Новые видео и статья Что такое HTML.

08.06.2018
Новые видео и статья Процедура BlockWrite.

03.06.2018
Новый выпуск журнала Автоматизация и программирование.

26.05.2018
Новые видео и статья Как изменить дизайн сайта на Wordpress.



Раздел: Как стать программистом / Секреты программирования /

Русский язык в консольных приложениях Lazarus

Наверняка вы уже знаете, что с определённого времени редактор исходного кода Lazarus по умолчанию работает в кодировке UTF8. Это не страшно, если вы создаёте приложения с графическим интерфейсом, либо консольные приложения с выводом на английском языке.

Но! Всё меняется, когда вы пытаетесь вывести в консоль Windows русские буквы. Вместо русских символов выводятся “краказябры”. И это реально бесит.

Происходит это потому, что в редакторе исходного кода Lazarus символы имеют кодировку UTF8, а консоль Windows (во всяком случае, в Windows версии до XP включительно, и в “семёрке” по моему тоже) имеет другую кодировку (обычно CP866, хотя может быть и другая).

Поэтому консоль не понимает, какие символы ей надо выводить. В итоге мы видим злополучные “краказябры” (см. рис.).

Краказябры вместо русского языка

Русский язык в Lazarus - это давняя беда, которая мучает всех программистов, а особенно - начинающих. Об одном из решений я этого вопроса рассказывал здесь. Это решение рабочее, но не всегда приемлемое. К тому же оно может сыграть с вами злую шутку, когда при повторном открытии проекта вместо комментариев и других русских букв в исходных кодах вы увидите всё те же “краказябры”.

Поэтому сегодня я расскажу ещё об одном решении. Оно тоже не идеально, но в некоторых случаях может пригодиться.

Итак, для того, чтобы в консоль Windows выводились правильно русские символы, я предлагаю использовать функцию UTF8ToConsole, которая преобразует строку в кодировке UTF8 в кодировку, которая используется консольными приложениями Windows по умолчанию.

Прелесть использования этой функции в том, что вам не надо знать, какая именно кодировка используется консолью. Функция сама это определит и выполнит необходимые преобразования.

Но, есть одно “но”. И даже не одно, а два.

Во-первых, функция UTF8ToConsole находится в модуле LazUTF8. Соответственно, вам этот модуль надо подключить к своей программе (надо сказать, что эта функция есть и в других модулях, например, в модуле FileUtil, но я советую использовать LazUTF8, потому что в нём есть и другие полезные функции для работы с UTF8).

А во-вторых, вам надо будет выполнить следующие действия:

  • В главном меню выбрать ПРОЕКТ - ИНСПЕКТОР ПРОЕКТА - КНОПКА ДОБАВИТЬ (+) - НОВАЯ ЗАВИСИМОСТЬ
  • В открывшемся окне в списке выбрать LCL и нажать кнопку СОЗДАТЬ НОВУЮ ЗАВИСИМОСТЬ
  • Закрыть окно инспектора объектов.

Если что-то непонятно, то см. видео выше.

После этого все строки с русскими символами, которые должны выводиться в консоль, в исходном коде надо записывать так:

WriteLn(UTF8ToConsole('Это текст, который состоит из русских букв.'));

Итог см. на рисунке:

Русский язык в Лазарус

Но! Снова эти “но”.

В некоторых случаях этот способ может не сработать (зависит от настроек операционной системы и некоторых других обстоятельств - я не стал разбираться в причинах).

Если вы сделали всё, что здесь описано, но русские буквы всё-равно не выводятся правильно, то попробуйте изменить шрифт в консоли (правая кнопка по заголовку - свойства - шрифт). Выберите шрифт Lucida Console. Если не знаете, как это сделать, то см. видео о свойствах консоли здесь.

У меня, например, на ноутбуке этот способ работает нормально со всеми шрифтами. А на рабочем компьютере русские буквы правильно отображаются только если выбрать шрифт Lucida Console.

Для учебных программ это не проблема - измените свойства для окна (поменяйте шрифт) и всё.

Но вот если вы вдруг будете распространять свою программу, то вам, конечно, надо бы знать наверняка, что этот способ сработает, или хотя бы постараться сделать так, чтобы при запуске программы устанавливался нужный шрифт.

Сделать это можно, но это уже другая история...


Директивы компилятора Директивы компилятора
Как это ни странно, но даже многие опытные программисты не используют директивы компилятора, считая их чем-то ненужным и бесполезным. А между тем, директивы компилятора - это очень классная штука. Если их умело применять в своих программах, то можно существенно сократить время на разработку и уменьшить количество рутинных операций. Подробнее...
Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика