Страница 2 из 2
Re: Free Paskal, Geany, Кирилица
Добавлено: 12.10.2017 15:29:18
SSerge
Уточним.
Текст сохранить в кодировке UTF-8
директиву в тексте поставить {$codepage UTF-8}
все остальные варианты - плавайте пожалуйста.
RTL будет не в UTF-8 - тоже плавайте и взывайте о странностях.
да, сказанное здесь и выше относится к компиляторам 3.х, для более ранних - неправда.
Re: Free Paskal, Geany, Кирилица
Добавлено: 12.10.2017 15:41:43
vitaly_l
SSerge писал(а):Текст сохранить в кодировке UTF-8
директиву в тексте поставить {$codepage UTF-8}
+100500 (всё остальное

как уже говорилось выше - вода).
Однако, принцессе Яре - нужно было объяснить, как оно устроено, чтобы она сама попробовала и поняла в чём суть директивы CP866. Иначе, даже самые опытные программисты путаются в кодировках и директивах, явно не понимая зачем это "лузеры" писавшие FPC оставили возможность директивы на кодировку CP866, если "все" в ней "плавают" и взывают "о странностях".
.
Re: Free Paskal, Geany, Кирилица
Добавлено: 12.10.2017 15: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 15: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 16:20:58
vitaly_l
serbod писал(а):UTF-8, поскольку это самая универсальная кодировка
Вообще-то смотря для каких целей, в некоторых случаях, например когда нужно вставить в тело программы все словари русских слов, то экономичнее использовать CP866. Кроме того, кодировка CP866, открывает двери к некоторым возможностям паскаля, которые с приходом UTF-8 для русских символов - стали недоступны. Так что, насчёт "универсальности" - бабка (яга костяная нога), надвое сказала

.
Re: Free Paskal, Geany, Кирилица
Добавлено: 13.10.2017 08: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 10:24:48
Vadim
Лекс Айрин писал(а):в консоли винды стоит cp866 как данный факт можно объяснить?
Если это касается винды, то исключительно как желание сохранить приятные воспоминания о пребывании в ясельной группе детского сада.

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

Re: Free Paskal, Geany, Кирилица
Добавлено: 13.10.2017 12:49:02
SSerge
Vadim писал(а):виндоделы нас в своё время спрашивали, какую кодировку для русского языка вставить. Могли бы предложить советский стандарт koi8r
Вот и появилась в винде кодировка cp1251, потому что именно она была ГОСТирована, в отличие от кустарной cp866. За это большое спасибо АН СССР.
Re: Free Paskal, Geany, Кирилица
Добавлено: 13.10.2017 16:27:36
Яра
Уважаемая мужская половина, думаю тему можно закрыть. Я ведь не хотела Вас поссорить...А в Geany, у мене все заработало с кирилицей (я все там что -то меняла-меняла... ). Но уже перекинулась на Lazarus. Правда, как работать с текстами я еще не поняла, но с числами уже получается)
Re: Free Paskal, Geany, Кирилица
Добавлено: 13.10.2017 17:23:04
Лекс Айрин
Яра, да не бойся, не поссоришь. Мы так периодически общаемся... заодно и мотаем на ус разные мелкие хитрости)))
Яра писал(а):Правда, как работать с текстами я еще не поняла, но с числами уже получается)
Да так же как и в обычном паскале, только набор функций немного другой. Ну и результат выводится не в консоль (Read/write), а в соответствующие компоненты (Label, Memo...).
Re: Free Paskal, Geany, Кирилица
Добавлено: 14.10.2017 00:01:13
Яра
Лекс Айрин писал(а): Да так же как и в обычном паскале, только набор функций немного другой. Ну и результат выводится не в консоль (Read/write), а в соответствующие компоненты (Label, Memo...).
Уже не много разобралась, но вот проброблемка. А как ее решить - не знаю. Если АvtoSize - False(нашла в нете) вообще ничего не выводится, пробовала менять WordWrap, тоже без изменений.
Хочу что бы выводилось, по размеру формы...., а не так, как у меня
Добавлено спустя 13 минут 34 секунды:Лекс Айрин писал(а):...- {$codepage UTF8}...
- вместо string - UnicodeString, char - UnicodeChar...
Вот так у меня Geany и начал выводить на консоль кириллицу (только букву "і" тоже не выводил), по этому и переключилась на Lazarus)
Re: Free Paskal, Geany, Кирилица
Добавлено: 14.10.2017 01:05:49
vitaly_l
Яра писал(а):разобралась, но вот проброблемка. А как ее решить - не знаю. Если АvtoSize - False(нашла в нете) вообще ничего не выводится, пробовала менять WordWrap, тоже без изменений.
Замените Label на StaticText ( он на второй вкладке Additional иконка [abc] ).
.
Re: Free Paskal, Geany, Кирилица
Добавлено: 14.10.2017 08:32:05
Лекс Айрин
Яра писал(а):Хочу что бы выводилось, по размеру формы...., а не так, как у меня

Автосайз формы, плюс в редакторе привязок лабел привяжи по левой и правой сторонам формы. Правда, размер шрифта может поплыть.
Яра писал(а):по этому и переключилась на Lazarus)
Потому что нужно использовать украинскую кодировку -- cp866 тут не совсем подходит, так как не все символы в ней есть.
Re: Free Paskal, Geany, Кирилица
Добавлено: 14.10.2017 09:18:50
Яра
Лекс Айрин писал(а):Автосайз формы, плюс в редакторе привязок лабел привяжи по левой и правой сторонам формы. Правда, размер шрифта может поплыть.
Отчет...
Добавлено спустя 1 минуту 44 секунды:vitaly_l писал(а):Замените Label на StaticText ( он на второй вкладке Additional иконка [abc] ).
Отчет...

Re: Free Paskal, Geany, Кирилица
Добавлено: 14.10.2017 09:54:47
Лекс Айрин
Яра писал(а):Отчет...
Отключи авторесайз формы.