Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/55: Рейтинг темы: голосов - 55, средняя оценка - 4.78
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661

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

15.11.2019, 07:06. Показов 11307. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Консольное приложение под Windows 10
Добавляю в список зависимостей проекта LazUtils
составляю тестовую программу
Delphi
1
2
3
4
5
6
7
program LazTest;
uses LazUTF8,Windows;
begin
 SetConsoleOutputCP(CP_UTF8);
 writeln(UTF8ToConsole('Привет на русском языке '));
 readln;
end.
Запускаю и вместо ожидаемого текста на русском выводится фигня -3- 4 непонятных символа с пробелами
Что надо сделать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.11.2019, 07:06
Ответы с готовыми решениями:

Русский язык в консольных приложениях
Какая то фигня. Добился русского языка при вводе и выводе настройками компилятора {$mode objfpc}{$H+} {$codepage UTF8} при...

Русский язык в консольных приложениях!
Здравствуйте форумчане, у меня возник такой вопрос, вообщем когда я вывожу командой cout то русские символы переводятся в кракозяблики ))...

Ошибка в консольных приложениях
Все привет Как получить последнюю ошибку в консоль. приложениях а то при ошибке оно сразу закрывается и выяснение причины ошибки...

12
2374 / 776 / 561
Регистрация: 15.01.2019
Сообщений: 2,394
15.11.2019, 08:25
Нужно открыть "Старт" -> "Все программы" -> Стандартные -> "Командная строка".
В этой программе кликнуть правой кнопкой мыши по полосе заголовка и в меню в пункте "свойства" установить шрифт Lucida Console.
У меня русский шрифт работает с таким кодом.
Pascal
1
2
3
4
5
6
7
8
program LazTest;
uses
  Windows;
begin
 SetConsoleOutputCP(CP_UTF8);
 writeln('Привет на русском языке ');
 readln;
end.
или с таким кодом.
Pascal
1
2
3
4
5
program LazTest;
begin
 writeln(Utf8Decode('Привет на русском языке '));
 readln;
end.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33416 / 21524 / 8238
Регистрация: 22.10.2011
Сообщений: 36,931
Записей в блоге: 12
15.11.2019, 16:54
Если система локализована (или хотя бы в настройках локаль для Non-Unicode приложений выставлена в Russian) - то все гораздо проще, не надо ничего менять в настройках шрифта, и никаких лишних зависимостей добавлять не надо:
Pascal
1
2
3
4
5
6
7
8
9
10
{$mode objfpc}{$H+}
{$codepage UTF8}
program project1;
 
var s : UnicodeString;
begin
  s := 'Привет на русском языке';
  writeln(s);
  ReadLn;
end.
Вот результат (Win8, но на Win10 все будет аналогично) :
Миниатюры
Русский язык в консольных приложениях  
0
2374 / 776 / 561
Регистрация: 15.01.2019
Сообщений: 2,394
16.11.2019, 00:56
Цитата Сообщение от volvo Посмотреть сообщение
var s : UnicodeString;
volvo, задавать именно такой тип строковой информации обязательно, или можно string по старинке использовать?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33416 / 21524 / 8238
Регистрация: 22.10.2011
Сообщений: 36,931
Записей в блоге: 12
16.11.2019, 01:00
Обязательно
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7818 / 4637 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
17.11.2019, 09:42
ValentinNemo,
Если задано {$codepage utf8}, то string компилируется как UnicodeString со всеми сопутствующими «сюрпризами».

https://wiki.freepascal.org/Un... in_Lazarus

Добавлено через 17 минут
volvo,
С некоторых пор это уже не так.
0
2374 / 776 / 561
Регистрация: 15.01.2019
Сообщений: 2,394
17.11.2019, 11:38
bormant, я проверил string и UnicodeString. Вводится и выводится кириллица хорошо в обоих случаях, а вот классические процедуры и функции для работы со строками работают по разному.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
program project1;
{$mode objfpc}{$H+}
{$codepage UTF8}
var s: UnicodeString;
begin
  s := 'Привет на русском языке';
  writeln(s);
  writeln(copy(s,2,3));
  writeln('Напишите что-нибудь на кириллице:');
  readln(s);
  writeln('Вот что выводится: ' + s);
  writeln(copy(s,2,3));
  ReadLn;
end.
Протокол работы программы

Привет на русском языке
рив
Напишите что-нибудь на кириллице:
жвдлжыдлажыдаыжда
Вот что выводится: жвдлжыдлажыдаыжда
вдл


Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
program project1;
{$mode objfpc}{$H+}
{$codepage UTF8}
var s: String;
begin
  s := 'Привет на русском языке';
  writeln(s);
  writeln(copy(s,2,3));
  writeln('Напишите что-нибудь на кириллице:');
  readln(s);
  writeln('Вот что выводится: ' + s);
  writeln(copy(s,2,3));
  ReadLn;
end.
Протокол работы программы

Привет на русском языке

Напишите что-нибудь на кириллице:
далыодалыоад
Вот что выводится: далыодалыоад
алы
1
 Аватар для vlisp
1067 / 988 / 153
Регистрация: 10.08.2015
Сообщений: 5,394
19.11.2019, 02:40
проверять надо так
Pascal
1
if s = 'Вася' then ...
0
0 / 0 / 0
Регистрация: 18.08.2016
Сообщений: 32
13.09.2020, 01:20
Добавлено через 2 минуты
Цитата Сообщение от volvo Посмотреть сообщение
program project1;
var s : UnicodeString;
Ваш код не работает на Win7

Добавлено через 1 минуту
По моему мнению, лучший вариант будет этот:
Delphi
1
2
3
4
5
function StrAnsiToOem(const S: AnsiString): AnsiString;
begin
  SetLength(Result, Length(S));
  AnsiToOemBuff(@S[1], @Result[1], Length(S));
end;
0
пофигист широкого профиля
4770 / 3206 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
13.09.2020, 01:23
Цитата Сообщение от I_CaR Посмотреть сообщение
Ваш код не работает на Win7
Прекрасно работает.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33416 / 21524 / 8238
Регистрация: 22.10.2011
Сообщений: 36,931
Записей в блоге: 12
13.09.2020, 01:27
I_CaR, да? Очень интересно. А вот это тогда что?
Миниатюры
Русский язык в консольных приложениях  
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33416 / 21524 / 8238
Регистрация: 22.10.2011
Сообщений: 36,931
Записей в блоге: 12
13.09.2020, 01:32
Цитата Сообщение от I_CaR Посмотреть сообщение
По моему мнению, лучший вариант будет этот:
Ну разумеется, в кроссплатформенном Лазарусе нужно же написать код на WinAPI, как я раньше не догадывался... Да еще выбрать ту функцию, которая была предназначена для совместимости с 16-битными Windows, ее даже под 32-бита уже использовать не рекомендуется. Закопали уже. Но некоторые опять откапывают, и другим еще советуют...
0
пофигист широкого профиля
4770 / 3206 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
13.09.2020, 02:30

Не по теме:

Цитата Сообщение от volvo Посмотреть сообщение
А вот это тогда что?
А откуда вы взяли Win7? Неужели поставили только ради этого ответа? Зачем?
Win7 для меня родной и я уже ответил ТС. Разве что скриншот не привел.
Ну так презумпция невиновности не позволила.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.09.2020, 02:30
Помогаю со студенческими работами здесь

Графика в консольных приложениях WIN32
Всем привет))) Может тупой вопрос но оч надо узнать, как работать с простой графикой на новых версиях VC++. Я знаю что нужен graphic.h. Но...

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

Еще о консольных приложениях в VB - переназначение В/Выв
Кто может подсказать пример консольного приложения на VB, которое бы корректно обрабатывало переназначение ввода/вывода?

Как рисовать в консольных приложениях? Нужна помощь
Здравствуйте. Как можно рисовать в консольных приложениях используя с++? НЕ VISUAL с++. Если можно, представьте пожалуйтса код.

Обмен данными между процессами в консольных приложениях
Привет. Можно ли как - то обмениваться данными между двумя запущенными консольными приложениями без WinAPI и без использования файлов...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru