Re: Прикручивание русского языка к FP в линуксе
Добавлено: 03.02.2013 08:35:04
Сквозняк писал(а):Сколько лет уже работаю с Lazarus-ом никогда не задумывался о том, что у него какие-то "плохие" шрифты в редакторе, они меня полностью устраивают
Под Windows у него все относительно нормально, под линукс отображение шрифтов поганенькое, факт.
Некорректное отображение файлов в байтовых кодировках (не UTF-8) также имеет место; но особого значения на практике не несет, ибо нефиг ими пользоваться.
Кстати, cp866 - самая неудачная кодировка в плане поддержки компилятора. Он (компилятор) её при считывании файлов, если задана директива {$codepage cp866}, извращает.
ну и в плане программирования для "линуксов" байтовые кодировки актуальны для древних релизов типа Красной Шапки 7 или архиконсервативной FreeBSD, у которой корректной уникодной локали нет до сих пор.
Вообще, сторонникам программирования в консолях, наконец то стоило бы задуматься над тем, как они осуществляют задачу вывода национальных символов на консоль и ввода.
методика №1. Я бы назвал ее "жопа советского периода"
- Код: Выделить всё
program test;
Var s:string;
begin
write('введите строку:');
readln(s);
writeln('Вы ввели:',s);
end.
В данном случае нет речи вообще о каких-то языковых структурах. Компилятору тупо скармливается as is байтовое представление исходника, строка как есть передается на экран. Исходники в обязательном порядке должны быть в той кодировке, в которой работает текстовая консоль. При попытке работатьс консолью UTF8 первое что вылезает - это нарушение позиционирования при форматном выводе (типа writeln('Моя строка':15,s:10);) и другие радости.
методика №2. Промежуточная. Текст исходника - только в UTF8. Порождена как раз переходом лазаруса в UTF и работой с его редакторами. Компиляторы 2.6.х и младьшие. Delphi uncompatible вообще то.
- Код: Выделить всё
program test;
Var s:string;
begin
write(UTF8ToConsole('введите строку:'));
readln(s);
s:=consoleToUTF8(s);
...
writeln(UTF8ToConsole('Вы ввели:'),UTF8ToConsole(s));
end.
Методика 3. То, что сделано в Delphi, начиная с 2005-й версии и вообще то единственно правильный способ с точки зрения идеологии. Требует компилятора 2.7.х с поддержкой unicode, который еще не вышел в стадию релиза, хотя надо сказать, вполне работоспособен.
- Код: Выделить всё
{$codepage UTF8}
program test;
Var s:UnicodeString;
begin
write('введите строку:');
readln(s);
writeln('Вы ввели:',s);
end.
Здесь преобразования кодовых страниц и строк управляются компилятором и все работает именно так, как и должно работать.
Однако, всегда по факту превалирует методика "жопа советского периода". Причина изначальная - неосмысленный перевод западных - в первую очередь американских - книжек про программирование. Они там не знают значков которые за кодом ASCII, им кириллица не нужна.