Free Paskal, Geany, Кирилица

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Re: Free Paskal, Geany, Кирилица

Сообщение SSerge » 12.10.2017 16:29:18

Уточним.
Текст сохранить в кодировке UTF-8
директиву в тексте поставить {$codepage UTF-8}

все остальные варианты - плавайте пожалуйста.
RTL будет не в UTF-8 - тоже плавайте и взывайте о странностях.

да, сказанное здесь и выше относится к компиляторам 3.х, для более ранних - неправда.
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Free Paskal, Geany, Кирилица

Сообщение vitaly_l » 12.10.2017 16:41:43

SSerge писал(а):Текст сохранить в кодировке UTF-8
директиву в тексте поставить {$codepage UTF-8}

+100500 (всё остальное :roll: как уже говорилось выше - вода).

Однако, принцессе Яре - нужно было объяснить, как оно устроено, чтобы она сама попробовала и поняла в чём суть директивы CP866. Иначе, даже самые опытные программисты путаются в кодировках и директивах, явно не понимая зачем это "лузеры" писавшие FPC оставили возможность директивы на кодировку CP866, если "все" в ней "плавают" и взывают "о странностях".


.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Free Paskal, Geany, Кирилица

Сообщение Лекс Айрин » 12.10.2017 16:50:07

Лекс Айрин писал(а):А чем Вам директива codepage не нравится?


Это не мне... был тут раньше разговор, в котором меня уверяли, что она жутко тормозит программу. И да, директива должна соответствовать реальному положению дел.

Код: Выделить всё
т.е:
- Делается текст в UTF-8 без BOMов
- опциями компиляции выставляется codepage для RTL в UTF-8 (Лазарус для сових проектов это делает, см. если что там, какой именно ключ)
- в тексте директива {$mode objfpc} {$codepage UTF-8} {H+}
- вместо string - UnicodeString, и только в этом случае можно надеяться на посимвольную обработку строк в виде массива... до тех пор, пока в исходные данные не попадет нечто, кодируемое суррогатными парами. Условно к русским буквам это нечто не относится.


в консоли винды стоит cp866 как данный факт можно объяснить?
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Free Paskal, Geany, Кирилица

Сообщение serbod » 12.10.2017 16:55:43

Есть несколько разных кодировок, независимо от текста исходника:

- кодировка окна консоли: в русскоязычной винде CP866 для совместимости с MS DOS, в линуксе обычно UTF-8, но может быть что угодно
- кодировка системы (имена файлов, текст в кнопках и окошках, итд): в русскоязычной винде CP1251 или UTF-16, в линуксе UTF-8 или что угодно

Для компилятора FreePascal до версии 3.0.0 необходимо было вручную переводить строки в нужную кодировку перед чтением/записью текста в консоль или при использовании системных функций.
В FreePascal 3.0.2 добавили автоматический перевод кодировки для системных функций. Но не всех и не всегда. Поэтому переводить в системную или консольную кодировку все еще желательно вручную. Пока что это самое универсальное решение.

Кодировку исходника лучше выбрать UTF-8, поскольку это самая универсальная кодировка и в большинстве случаев используется по-умолчанию.
Аватара пользователя
serbod
постоялец
 
Сообщения: 449
Зарегистрирован: 16.09.2016 11:03:02
Откуда: Минск

Re: Free Paskal, Geany, Кирилица

Сообщение vitaly_l » 12.10.2017 17:20:58

serbod писал(а):UTF-8, поскольку это самая универсальная кодировка

Вообще-то смотря для каких целей, в некоторых случаях, например когда нужно вставить в тело программы все словари русских слов, то экономичнее использовать CP866. Кроме того, кодировка CP866, открывает двери к некоторым возможностям паскаля, которые с приходом UTF-8 для русских символов - стали недоступны. Так что, насчёт "универсальности" - бабка (яга костяная нога), надвое сказала :wink: .
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Free Paskal, Geany, Кирилица

Сообщение sign » 13.10.2017 09:11:45

У меня читаемый документ бывает то так, то эдак.

Код: Выделить всё
// 0 Документ не существует
// 1 Документ уже открыт
// 2 Ошибка в документе
// 4 Документ успешно открыт
function InitRecD(aFile: String): TResultOpenDoc;
var Q: String;
begin
  if not FileExists(aFile) then Exit(rodNoFile);
  // Проверить, что документ уже открыт
  if VParam.History.IsOpen(aFile) <> -1 then Exit(rodAlreadyOpen);
  VListD.LoadFromFile(aFile);
  if VListD.Count < 1 then Exit(rodErrorStructure);
  Q := GuessEncoding(VListD[0]);
  if Q <> EncodingUTF8 then VListD.Text := cp1251ToUTF8(VListD.Text);
  VPosListD := 0;
  Result := rodOpen;
end;
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Free Paskal, Geany, Кирилица

Сообщение Vadim » 13.10.2017 11:24:48

Лекс Айрин писал(а):в консоли винды стоит cp866 как данный факт можно объяснить?

Если это касается винды, то исключительно как желание сохранить приятные воспоминания о пребывании в ясельной группе детского сада. :-)
К примеру, Linux перешёл с однобайтных кодировок на UTF-8 исключительно потому, чтобы не портить английскую кодировку. Народ малость побухтел, но никто программировать не бросил. У винды дела хуже - сначала одна однобайтная кодировка (СР866), потом другая (СР1251), потом уже совсем третья, многобайтовая. Если первые две в плане англ. языка совместимы, то UTF-16 совсем даже нет. А документов то много осталось. Я всякие старые описания из NASA и прочих высоконаучных организаций до сих пор читаю в старой кодировке. Отсюда и зоопарк с кодировками в винде.
Кстати, виндоделы нас в своё время спрашивали, какую кодировку для русского языка вставить. Могли бы предложить советский стандарт koi8r, но видимо мы гордо промолчали. :-)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Free Paskal, Geany, Кирилица

Сообщение SSerge » 13.10.2017 13:49:02

Vadim писал(а):виндоделы нас в своё время спрашивали, какую кодировку для русского языка вставить. Могли бы предложить советский стандарт koi8r


Вот и появилась в винде кодировка cp1251, потому что именно она была ГОСТирована, в отличие от кустарной cp866. За это большое спасибо АН СССР.
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Free Paskal, Geany, Кирилица

Сообщение Яра » 13.10.2017 17:27:36

Уважаемая мужская половина, думаю тему можно закрыть. Я ведь не хотела Вас поссорить...А в Geany, у мене все заработало с кирилицей (я все там что -то меняла-меняла... ). Но уже перекинулась на Lazarus. Правда, как работать с текстами я еще не поняла, но с числами уже получается)
Яра
новенький
 
Сообщения: 13
Зарегистрирован: 07.10.2017 00:43:31

Re: Free Paskal, Geany, Кирилица

Сообщение Лекс Айрин » 13.10.2017 18:23:04

Яра, да не бойся, не поссоришь. Мы так периодически общаемся... заодно и мотаем на ус разные мелкие хитрости)))

Яра писал(а):Правда, как работать с текстами я еще не поняла, но с числами уже получается)


Да так же как и в обычном паскале, только набор функций немного другой. Ну и результат выводится не в консоль (Read/write), а в соответствующие компоненты (Label, Memo...).
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Free Paskal, Geany, Кирилица

Сообщение Яра » 14.10.2017 00:47:39

Лекс Айрин писал(а): Да так же как и в обычном паскале, только набор функций немного другой. Ну и результат выводится не в консоль (Read/write), а в соответствующие компоненты (Label, Memo...).

Уже не много разобралась, но вот проброблемка. А как ее решить - не знаю. Если АvtoSize - False(нашла в нете) вообще ничего не выводится, пробовала менять WordWrap, тоже без изменений.
Хочу что бы выводилось, по размеру формы...., а не так, как у меня :cry:
Изображение

Добавлено спустя 13 минут 34 секунды:
Лекс Айрин писал(а):...- {$codepage UTF8}...
- вместо string - UnicodeString, char - UnicodeChar...


Вот так у меня Geany и начал выводить на консоль кириллицу (только букву "і" тоже не выводил), по этому и переключилась на Lazarus)
Яра
новенький
 
Сообщения: 13
Зарегистрирован: 07.10.2017 00:43:31

Re: Free Paskal, Geany, Кирилица

Сообщение vitaly_l » 14.10.2017 02:05:49

Яра писал(а):разобралась, но вот проброблемка. А как ее решить - не знаю. Если АvtoSize - False(нашла в нете) вообще ничего не выводится, пробовала менять WordWrap, тоже без изменений.

Замените Label на StaticText ( он на второй вкладке Additional иконка [abc] ).

.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Free Paskal, Geany, Кирилица

Сообщение Лекс Айрин » 14.10.2017 09:32:05

Яра писал(а):Хочу что бы выводилось, по размеру формы...., а не так, как у меня :cry:


Автосайз формы, плюс в редакторе привязок лабел привяжи по левой и правой сторонам формы. Правда, размер шрифта может поплыть.

Яра писал(а):по этому и переключилась на Lazarus)


Потому что нужно использовать украинскую кодировку -- cp866 тут не совсем подходит, так как не все символы в ней есть.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Free Paskal, Geany, Кирилица

Сообщение Яра » 14.10.2017 10:17:06

Лекс Айрин писал(а):Автосайз формы, плюс в редакторе привязок лабел привяжи по левой и правой сторонам формы. Правда, размер шрифта может поплыть.

Отчет...
Изображение

Добавлено спустя 1 минуту 44 секунды:
vitaly_l писал(а):Замените Label на StaticText ( он на второй вкладке Additional иконка [abc] ).

Отчет...
Изображение
Яра
новенький
 
Сообщения: 13
Зарегистрирован: 07.10.2017 00:43:31

Re: Free Paskal, Geany, Кирилица

Сообщение Лекс Айрин » 14.10.2017 10:54:47

Яра писал(а):Отчет...


Отключи авторесайз формы.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Пред.

Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17

Рейтинг@Mail.ru