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



04.11.2017
Новые видео и статья Функция Odd.

29.10.2017
Новые видео и статья Функция Low.

23.10.2017
Новая задача Даны натуральные числа от 1 до 33.

22.10.2017
Добавлен раздел Статьи по С/С++.

03.10.2017
Новая книга 1001 вопрос начинающего программиста.

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

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

Как стать программистом 2.0 Как стать программистом 2.0

Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… Подробнее...

Наверняка вы уже знаете, что с определённого времени редактор исходного кода 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

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