Страница 1 из 5

Поддержка русского языка

СообщениеДобавлено: 08.11.2015 09:06:57
AnnaNsk
Добрый день!
Подскажите, установлен FPC 2.6.4 при написании программы в операторе writeln используем русский текст. (writeln('Привет'))
В консольном окне русский не отображается, а всякие "крякозябры". (смотри вложение)
Как это обойти? Надо, чтобы поддерживался вывод русских букв.
Спасибо.

Re: Поодержка русского языка

СообщениеДобавлено: 08.11.2015 13:13:45
Zhbr
Какая ОС?
В данном модуле есть процедуры конвертации строк, попробуй http://freepascal.org/docs-html/rtl/system/index-5.html

Re: Поодержка русского языка

СообщениеДобавлено: 08.11.2015 14:58:03
AnnaNsk
Win8

Re: Поодержка русского языка

СообщениеДобавлено: 08.11.2015 16:43:17
vitaly_l
AnnaNsk писал(а):Win8

Код: Выделить всё
writeln( UTF8ToSys( 'Привет!' ) ); // попробуйте, и будет Вам счастье, скорее всего.

Re: Поодержка русского языка

СообщениеДобавлено: 08.11.2015 17:59:41
Vadim
AnnaNsk
А в чём Вы исходный код программы пишете?

Re: Поодержка русского языка

СообщениеДобавлено: 08.11.2015 20:14:57
gvido
В windows 7 в консольных приложениях использую
Код: Выделить всё
writeln(utf8toconsole('Приветик'));
Так как кодировка консоли по умолчанию 866.

Re: Поодержка русского языка

СообщениеДобавлено: 08.11.2015 20:49:25
AnnaNsk
А в чём Вы исходный код программы пишете?
Может, не совсем поняла вопрос. На Pascal. Использую IDE FreePascal. Вы это имели ввиду?
writeln( UTF8ToSys( 'Привет!' ) ); // попробуйте, и будет Вам счастье, скорее всего. writeln(utf8toconsole('Приветик'));
при компиляции выдается следующая ошибка

Добавлено спустя 55 секунд:
Ошибка во вложении

Re: Поодержка русского языка

СообщениеДобавлено: 08.11.2015 22:58:03
скалогрыз
попробуй так:
Код: Выделить всё
uses Windows;
begin
   SetConsoleOutputCP(1251);
   writeln('Привет!');
   writeln('Ответ: ',2+2);
end.

Re: Поодержка русского языка

СообщениеДобавлено: 09.11.2015 06:37:07
SSerge
gvido писал(а):Так как кодировка консоли по умолчанию 866.


Ага, если не учитывать, что текстовое IDE в принципе не работает с кодировкой UTF-8, тем более под windows... то тоже себе метод.

vitaly_l
см. 1) примечание выше 2) функция lazarus, недоступная без прямого подключения соответствующего unit.

ЗЫ: я могу сказать, как будет идеологически правильно, но компилятор должен быть 2.7.х - 3.х, в ранних это не поддерживается

Кстати, метод уважаемого Скалогрыза в предыдущем посте вполне работоспособен.

Re: Поодержка русского языка

СообщениеДобавлено: 09.11.2015 06:58:31
AnnaNsk
Методе скалогрыза привел вот к чему:

Добавлено спустя 16 минут 53 секунды:
Компилятор вот такой

Добавлено спустя 1 минуту 1 секунду:
Lazarus у нас нет

Re: Поодержка русского языка

СообщениеДобавлено: 09.11.2015 07:45:04
скалогрыз
AnnaNsk писал(а):Методе скалогрыза привел вот к чему:

какая жесть!

а если вот так попробовать:
Код: Выделить всё
uses Windows;
begin
   SetConsoleOutputCP(1251);
   writeln('Привет!');
   writeln('Ответ: ',2+2);
   SetConsoleOutputCP(866);
end.

Re: Поодержка русского языка

СообщениеДобавлено: 09.11.2015 07:53:01
SSerge
скалогрыз писал(а):какая жесть!


Там, возможно, для консоли подгружен несистемный русификатор, нечто вроде kb.com/rk.com или другой такой же кривой. В этом случае при смене видеорежимов, кодовой страницы и пр., windows переписывает его знакогенератор и получается продемонстрированная хрень. Любят этот rk криворукие одмины! :mrgreen: Хотя, уже во времена 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 08:40:09
AnnaNsk
ЧТо-то ничего не вышло((( Ужас какой-то.
Да и трудно будет детям объяснить как сделать, чтобы русский пошёл (особенно на первых уроках. Тем кто еще не знает про программирования.). Придеьтся опять использовать ABCPascal. А другим, кто захочет Free использовать рекомендовать писать на латинице.

Re: Поодержка русского языка

СообщениеДобавлено: 09.11.2015 08:53:29
SSerge
AnnaNsk
Вы мой код запускали? Что он вывел?

Re: Поодержка русского языка

СообщениеДобавлено: 09.11.2015 12:49:41
gvido
AnnaNsk, исходник в какой кодировке? Если приложение запускается в среде windows xp - Windows 7, то русский нужно приводить к кодировке 866.
Менять кодовую страницу консоли в сеансе приложения - тоже вариант. Но лучше перекодировать, как извратный вариант - сменить кодировку исходника.