Раздел: Как стать программистом / Секреты программирования /
Русский язык в консольных приложениях Lazarus
Lazarus IDE: Основы программирования в Windows
Несмотря на то, что всё потихоньку уходит в сеть, программирование для настольных компьютеров остаётся востребованным. И будет таковым ещё долго. Ну а самая распространённая операционная система для настольных компьютеров – это по-прежнему Windows. Поэтому любой программист, даже если он собирается стать веб-разработчиком, должен знать хотя бы основы создания программ для Windows. Подробнее... |
Наверняка вы уже знаете, что с определённого времени редактор исходного кода 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.
Для учебных программ это не проблема - измените свойства для окна (поменяйте шрифт) и всё.
Но вот если вы вдруг будете распространять свою программу, то вам, конечно, надо бы знать наверняка, что этот способ сработает, или хотя бы постараться сделать так, чтобы при запуске программы устанавливался нужный шрифт.
Сделать это можно, но это уже другая история...
Вступить в группу "Основы программирования"
Подписаться на канал в РУТУБ Подписаться на Дзен-канал Подписаться на рассылки по программированию |
Первые шаги в программирование
Очень небольшая книга, которую можно прочитать буквально за 15 минут. Но эти 15 минут дадут вам представление о том, что такое программирование. И вы даже напишите свою первую программу. Для тех, кто интересуется программированием, но ещё не знает, что это такое, и не пробовал создавать программы (или пробовал, но не получилось). Подробнее... |
Помощь в технических вопросах
Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение - ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. Подробнее... |