Поддержка русского языка
Модератор: Модераторы
Поддержка русского языка
Добрый день!
Подскажите, установлен FPC 2.6.4 при написании программы в операторе writeln используем русский текст. (writeln('Привет'))
В консольном окне русский не отображается, а всякие "крякозябры". (смотри вложение)
Как это обойти? Надо, чтобы поддерживался вывод русских букв.
Спасибо.
Подскажите, установлен FPC 2.6.4 при написании программы в операторе writeln используем русский текст. (writeln('Привет'))
В консольном окне русский не отображается, а всякие "крякозябры". (смотри вложение)
Как это обойти? Надо, чтобы поддерживался вывод русских букв.
Спасибо.
- Вложения
-
- 123.JPG (10.72 КБ) 34235 просмотров
Какая ОС?
В данном модуле есть процедуры конвертации строк, попробуй http://freepascal.org/docs-html/rtl/system/index-5.html
В данном модуле есть процедуры конвертации строк, попробуй http://freepascal.org/docs-html/rtl/system/index-5.html
AnnaNsk писал(а):Win8
Код: Выделить всё
writeln( UTF8ToSys( 'Привет!' ) ); // попробуйте, и будет Вам счастье, скорее всего.
AnnaNsk
А в чём Вы исходный код программы пишете?
А в чём Вы исходный код программы пишете?
В windows 7 в консольных приложениях использую Так как кодировка консоли по умолчанию 866.
Код: Выделить всё
writeln(utf8toconsole('Приветик'));Может, не совсем поняла вопрос. На Pascal. Использую IDE FreePascal. Вы это имели ввиду?А в чём Вы исходный код программы пишете?
при компиляции выдается следующая ошибкаwriteln( UTF8ToSys( 'Привет!' ) ); // попробуйте, и будет Вам счастье, скорее всего. writeln(utf8toconsole('Приветик'));
Добавлено спустя 55 секунд:
Ошибка во вложении
попробуй так:
Код: Выделить всё
uses Windows;
begin
SetConsoleOutputCP(1251);
writeln('Привет!');
writeln('Ответ: ',2+2);
end.
gvido писал(а):Так как кодировка консоли по умолчанию 866.
Ага, если не учитывать, что текстовое IDE в принципе не работает с кодировкой UTF-8, тем более под windows... то тоже себе метод.
vitaly_l
см. 1) примечание выше 2) функция lazarus, недоступная без прямого подключения соответствующего unit.
ЗЫ: я могу сказать, как будет идеологически правильно, но компилятор должен быть 2.7.х - 3.х, в ранних это не поддерживается
Кстати, метод уважаемого Скалогрыза в предыдущем посте вполне работоспособен.
Методе скалогрыза привел вот к чему:
Добавлено спустя 16 минут 53 секунды:
Компилятор вот такой
Добавлено спустя 1 минуту 1 секунду:
Lazarus у нас нет
Добавлено спустя 16 минут 53 секунды:
Компилятор вот такой
Добавлено спустя 1 минуту 1 секунду:
Lazarus у нас нет
AnnaNsk писал(а):Методе скалогрыза привел вот к чему:
какая жесть!
а если вот так попробовать:
Код: Выделить всё
uses Windows;
begin
SetConsoleOutputCP(1251);
writeln('Привет!');
writeln('Ответ: ',2+2);
SetConsoleOutputCP(866);
end.
скалогрыз писал(а):какая жесть!
Там, возможно, для консоли подгружен несистемный русификатор, нечто вроде kb.com/rk.com или другой такой же кривой. В этом случае при смене видеорежимов, кодовой страницы и пр., windows переписывает его знакогенератор и получается продемонстрированная хрень. Любят этот rk криворукие одмины!
Добавлено спустя 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
ЧТо-то ничего не вышло((( Ужас какой-то.
Да и трудно будет детям объяснить как сделать, чтобы русский пошёл (особенно на первых уроках. Тем кто еще не знает про программирования.). Придеьтся опять использовать ABCPascal. А другим, кто захочет Free использовать рекомендовать писать на латинице.
Да и трудно будет детям объяснить как сделать, чтобы русский пошёл (особенно на первых уроках. Тем кто еще не знает про программирования.). Придеьтся опять использовать ABCPascal. А другим, кто захочет Free использовать рекомендовать писать на латинице.
AnnaNsk
Вы мой код запускали? Что он вывел?
Вы мой код запускали? Что он вывел?
AnnaNsk, исходник в какой кодировке? Если приложение запускается в среде windows xp - Windows 7, то русский нужно приводить к кодировке 866.
Менять кодовую страницу консоли в сеансе приложения - тоже вариант. Но лучше перекодировать, как извратный вариант - сменить кодировку исходника.
Менять кодовую страницу консоли в сеансе приложения - тоже вариант. Но лучше перекодировать, как извратный вариант - сменить кодировку исходника.
