Страница 2 из 2

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

СообщениеДобавлено: 12.10.2017 16:29:18
SSerge
Уточним.
Текст сохранить в кодировке UTF-8
директиву в тексте поставить {$codepage UTF-8}

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

да, сказанное здесь и выше относится к компиляторам 3.х, для более ранних - неправда.

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

СообщениеДобавлено: 12.10.2017 16:41:43
vitaly_l
SSerge писал(а):Текст сохранить в кодировке UTF-8
директиву в тексте поставить {$codepage UTF-8}

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

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


.

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 как данный факт можно объяснить?

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

СообщениеДобавлено: 12.10.2017 16:55:43
serbod
Есть несколько разных кодировок, независимо от текста исходника:

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

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

Кодировку исходника лучше выбрать UTF-8, поскольку это самая универсальная кодировка и в большинстве случаев используется по-умолчанию.

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

СообщениеДобавлено: 12.10.2017 17:20:58
vitaly_l
serbod писал(а):UTF-8, поскольку это самая универсальная кодировка

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

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

СообщениеДобавлено: 13.10.2017 09:11:45
sign
У меня читаемый документ бывает то так, то эдак.

Код: Выделить всё
// 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;

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

СообщениеДобавлено: 13.10.2017 11:24:48
Vadim
Лекс Айрин писал(а):в консоли винды стоит cp866 как данный факт можно объяснить?

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

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

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


Вот и появилась в винде кодировка cp1251, потому что именно она была ГОСТирована, в отличие от кустарной cp866. За это большое спасибо АН СССР.

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

СообщениеДобавлено: 13.10.2017 17:27:36
Яра
Уважаемая мужская половина, думаю тему можно закрыть. Я ведь не хотела Вас поссорить...А в Geany, у мене все заработало с кирилицей (я все там что -то меняла-меняла... ). Но уже перекинулась на Lazarus. Правда, как работать с текстами я еще не поняла, но с числами уже получается)

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

СообщениеДобавлено: 13.10.2017 18:23:04
Лекс Айрин
Яра, да не бойся, не поссоришь. Мы так периодически общаемся... заодно и мотаем на ус разные мелкие хитрости)))

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


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

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)

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

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

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

.

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

СообщениеДобавлено: 14.10.2017 09:32:05
Лекс Айрин
Яра писал(а):Хочу что бы выводилось, по размеру формы...., а не так, как у меня :cry:


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

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


Потому что нужно использовать украинскую кодировку -- cp866 тут не совсем подходит, так как не все символы в ней есть.

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

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

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

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

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

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

СообщениеДобавлено: 14.10.2017 10:54:47
Лекс Айрин
Яра писал(а):Отчет...


Отключи авторесайз формы.