Страница 1 из 5
Поддержка русского языка
Добавлено: 08.11.2015 08:06:57
AnnaNsk
Добрый день!
Подскажите, установлен FPC 2.6.4 при написании программы в операторе writeln используем русский текст. (writeln('Привет'))
В консольном окне русский не отображается, а всякие "крякозябры". (смотри вложение)
Как это обойти? Надо, чтобы поддерживался вывод русских букв.
Спасибо.
Re: Поодержка русского языка
Добавлено: 08.11.2015 12:13:45
Zhbr
Какая ОС?
В данном модуле есть процедуры конвертации строк, попробуй
http://freepascal.org/docs-html/rtl/system/index-5.html
Re: Поодержка русского языка
Добавлено: 08.11.2015 13:58:03
AnnaNsk
Win8
Re: Поодержка русского языка
Добавлено: 08.11.2015 15:43:17
vitaly_l
AnnaNsk писал(а):Win8
Код: Выделить всё
writeln( UTF8ToSys( 'Привет!' ) ); // попробуйте, и будет Вам счастье, скорее всего.
Re: Поодержка русского языка
Добавлено: 08.11.2015 16:59:41
Vadim
AnnaNsk
А в чём Вы исходный код программы пишете?
Re: Поодержка русского языка
Добавлено: 08.11.2015 19:14:57
gvido
В windows 7 в консольных приложениях использую
Так как кодировка консоли по умолчанию 866.
Re: Поодержка русского языка
Добавлено: 08.11.2015 19:50:20
AnnaNsk
А в чём Вы исходный код программы пишете?
Может, не совсем поняла вопрос. На Pascal. Использую IDE FreePascal. Вы это имели ввиду?
writeln( UTF8ToSys( 'Привет!' ) ); // попробуйте, и будет Вам счастье, скорее всего. writeln(utf8toconsole('Приветик'));
при компиляции выдается следующая ошибка
Добавлено спустя 55 секунд:Ошибка во вложении
Re: Поодержка русского языка
Добавлено: 08.11.2015 21:58:03
скалогрыз
попробуй так:
Код: Выделить всё
uses Windows;
begin
SetConsoleOutputCP(1251);
writeln('Привет!');
writeln('Ответ: ',2+2);
end.
Re: Поодержка русского языка
Добавлено: 09.11.2015 05:37:07
SSerge
gvido писал(а):Так как кодировка консоли по умолчанию 866.
Ага, если не учитывать, что текстовое IDE в принципе не работает с кодировкой UTF-8, тем более под windows... то тоже себе метод.
vitaly_lсм. 1) примечание выше 2) функция lazarus, недоступная без прямого подключения соответствующего unit.
ЗЫ: я могу сказать, как будет идеологически правильно, но компилятор должен быть 2.7.х - 3.х, в ранних это не поддерживается
Кстати, метод уважаемого Скалогрыза в предыдущем посте вполне работоспособен.
Re: Поодержка русского языка
Добавлено: 09.11.2015 06:16:25
AnnaNsk
Методе скалогрыза привел вот к чему:
Добавлено спустя 16 минут 53 секунды:
Компилятор вот такой
Добавлено спустя 1 минуту 1 секунду:
Lazarus у нас нет
Re: Поодержка русского языка
Добавлено: 09.11.2015 06:45:04
скалогрыз
AnnaNsk писал(а):Методе скалогрыза привел вот к чему:
какая жесть!
а если вот так попробовать:
Код: Выделить всё
uses Windows;
begin
SetConsoleOutputCP(1251);
writeln('Привет!');
writeln('Ответ: ',2+2);
SetConsoleOutputCP(866);
end.
Re: Поодержка русского языка
Добавлено: 09.11.2015 07:05:24
SSerge
скалогрыз писал(а):какая жесть!
Там, возможно, для консоли подгружен несистемный русификатор, нечто вроде kb.com/rk.com или другой такой же кривой. В этом случае при смене видеорежимов, кодовой страницы и пр., windows переписывает его знакогенератор и получается продемонстрированная хрень. Любят этот rk криворукие одмины!

Хотя, уже во времена DOS он был одним из самых кривых.
Добавлено спустя 12 минут 23 секунды:AnnaNskВот это, пожалуйста, запустите:
Код: Выделить всё
program my_program;
uses Windows;
var s:string;
i,c:integer;
cp:integer;
begin
cp:=GetConsoleOutputCp;
writeln('Current code page=',cp);
SetConsoleOutputCP(1251);
writeln('Current code page=',GetConsoleOutputCp);
s:='Привет!';
writeln(s);
for i:=1 to length(s) do
write(ord(s[i]):8);
writeln;
writeln('Ответ: ',2+2);
SetConsoleOutputCP(cp);
writeln('Current code page=',GetConsoleOutputCp);
end.
при правильном отрабатывании должная вывести следующее (если исходник в cp1251):
Код: Выделить всё
C:\>my_program.exe
Current code page=866
Current code page=1251
Привет!
207 240 232 226 229 242 33
Ответ: 4
Current code page=866
Re: Поодержка русского языка
Добавлено: 09.11.2015 07:40:09
AnnaNsk
ЧТо-то ничего не вышло((( Ужас какой-то.
Да и трудно будет детям объяснить как сделать, чтобы русский пошёл (особенно на первых уроках. Тем кто еще не знает про программирования.). Придеьтся опять использовать ABCPascal. А другим, кто захочет Free использовать рекомендовать писать на латинице.
Re: Поодержка русского языка
Добавлено: 09.11.2015 07:53:29
SSerge
AnnaNsk
Вы мой код запускали? Что он вывел?
Re: Поодержка русского языка
Добавлено: 09.11.2015 11:49:41
gvido
AnnaNsk, исходник в какой кодировке? Если приложение запускается в среде windows xp - Windows 7, то русский нужно приводить к кодировке 866.
Менять кодовую страницу консоли в сеансе приложения - тоже вариант. Но лучше перекодировать, как извратный вариант - сменить кодировку исходника.