Free Paskal, Geany, Кирилица
Модератор: Модераторы
Уточним.
Текст сохранить в кодировке UTF-8
директиву в тексте поставить {$codepage UTF-8}
все остальные варианты - плавайте пожалуйста.
RTL будет не в UTF-8 - тоже плавайте и взывайте о странностях.
да, сказанное здесь и выше относится к компиляторам 3.х, для более ранних - неправда.
Текст сохранить в кодировке UTF-8
директиву в тексте поставить {$codepage UTF-8}
все остальные варианты - плавайте пожалуйста.
RTL будет не в UTF-8 - тоже плавайте и взывайте о странностях.
да, сказанное здесь и выше относится к компиляторам 3.х, для более ранних - неправда.
SSerge писал(а):Текст сохранить в кодировке UTF-8
директиву в тексте поставить {$codepage UTF-8}
+100500 (всё остальное
Однако, принцессе Яре - нужно было объяснить, как оно устроено, чтобы она сама попробовала и поняла в чём суть директивы CP866. Иначе, даже самые опытные программисты путаются в кодировках и директивах, явно не понимая зачем это "лузеры" писавшие FPC оставили возможность директивы на кодировку CP866, если "все" в ней "плавают" и взывают "о странностях".
.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Лекс Айрин писал(а):А чем Вам директива codepage не нравится?
Это не мне... был тут раньше разговор, в котором меня уверяли, что она жутко тормозит программу. И да, директива должна соответствовать реальному положению дел.
Код: Выделить всё
т.е:
- Делается текст в UTF-8 без BOMов
- опциями компиляции выставляется codepage для RTL в UTF-8 (Лазарус для сових проектов это делает, см. если что там, какой именно ключ)
- в тексте директива {$mode objfpc} {$codepage UTF-8} {H+}
- вместо string - UnicodeString, и только в этом случае можно надеяться на посимвольную обработку строк в виде массива... до тех пор, пока в исходные данные не попадет нечто, кодируемое суррогатными парами. Условно к русским буквам это нечто не относится.в консоли винды стоит cp866 как данный факт можно объяснить?
- serbod
- постоялец
- Сообщения: 449
- Зарегистрирован: 16.09.2016 10:03:02
- Откуда: Минск
- Контактная информация:
Есть несколько разных кодировок, независимо от текста исходника:
- кодировка окна консоли: в русскоязычной винде CP866 для совместимости с MS DOS, в линуксе обычно UTF-8, но может быть что угодно
- кодировка системы (имена файлов, текст в кнопках и окошках, итд): в русскоязычной винде CP1251 или UTF-16, в линуксе UTF-8 или что угодно
Для компилятора FreePascal до версии 3.0.0 необходимо было вручную переводить строки в нужную кодировку перед чтением/записью текста в консоль или при использовании системных функций.
В FreePascal 3.0.2 добавили автоматический перевод кодировки для системных функций. Но не всех и не всегда. Поэтому переводить в системную или консольную кодировку все еще желательно вручную. Пока что это самое универсальное решение.
Кодировку исходника лучше выбрать UTF-8, поскольку это самая универсальная кодировка и в большинстве случаев используется по-умолчанию.
- кодировка окна консоли: в русскоязычной винде CP866 для совместимости с MS DOS, в линуксе обычно UTF-8, но может быть что угодно
- кодировка системы (имена файлов, текст в кнопках и окошках, итд): в русскоязычной винде CP1251 или UTF-16, в линуксе UTF-8 или что угодно
Для компилятора FreePascal до версии 3.0.0 необходимо было вручную переводить строки в нужную кодировку перед чтением/записью текста в консоль или при использовании системных функций.
В FreePascal 3.0.2 добавили автоматический перевод кодировки для системных функций. Но не всех и не всегда. Поэтому переводить в системную или консольную кодировку все еще желательно вручную. Пока что это самое универсальное решение.
Кодировку исходника лучше выбрать UTF-8, поскольку это самая универсальная кодировка и в большинстве случаев используется по-умолчанию.
serbod писал(а):UTF-8, поскольку это самая универсальная кодировка
Вообще-то смотря для каких целей, в некоторых случаях, например когда нужно вставить в тело программы все словари русских слов, то экономичнее использовать CP866. Кроме того, кодировка CP866, открывает двери к некоторым возможностям паскаля, которые с приходом UTF-8 для русских символов - стали недоступны. Так что, насчёт "универсальности" - бабка (яга костяная нога), надвое сказала
У меня читаемый документ бывает то так, то эдак.
Код: Выделить всё
// 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;
Лекс Айрин писал(а):в консоли винды стоит cp866 как данный факт можно объяснить?
Если это касается винды, то исключительно как желание сохранить приятные воспоминания о пребывании в ясельной группе детского сада.
К примеру, Linux перешёл с однобайтных кодировок на UTF-8 исключительно потому, чтобы не портить английскую кодировку. Народ малость побухтел, но никто программировать не бросил. У винды дела хуже - сначала одна однобайтная кодировка (СР866), потом другая (СР1251), потом уже совсем третья, многобайтовая. Если первые две в плане англ. языка совместимы, то UTF-16 совсем даже нет. А документов то много осталось. Я всякие старые описания из NASA и прочих высоконаучных организаций до сих пор читаю в старой кодировке. Отсюда и зоопарк с кодировками в винде.
Кстати, виндоделы нас в своё время спрашивали, какую кодировку для русского языка вставить. Могли бы предложить советский стандарт koi8r, но видимо мы гордо промолчали.
Vadim писал(а):виндоделы нас в своё время спрашивали, какую кодировку для русского языка вставить. Могли бы предложить советский стандарт koi8r
Вот и появилась в винде кодировка cp1251, потому что именно она была ГОСТирована, в отличие от кустарной cp866. За это большое спасибо АН СССР.
Уважаемая мужская половина, думаю тему можно закрыть. Я ведь не хотела Вас поссорить...А в Geany, у мене все заработало с кирилицей (я все там что -то меняла-меняла... ). Но уже перекинулась на Lazarus. Правда, как работать с текстами я еще не поняла, но с числами уже получается)
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Яра, да не бойся, не поссоришь. Мы так периодически общаемся... заодно и мотаем на ус разные мелкие хитрости)))
Да так же как и в обычном паскале, только набор функций немного другой. Ну и результат выводится не в консоль (Read/write), а в соответствующие компоненты (Label, Memo...).
Яра писал(а):Правда, как работать с текстами я еще не поняла, но с числами уже получается)
Да так же как и в обычном паскале, только набор функций немного другой. Ну и результат выводится не в консоль (Read/write), а в соответствующие компоненты (Label, Memo...).
Лекс Айрин писал(а): Да так же как и в обычном паскале, только набор функций немного другой. Ну и результат выводится не в консоль (Read/write), а в соответствующие компоненты (Label, Memo...).
Уже не много разобралась, но вот проброблемка. А как ее решить - не знаю. Если АvtoSize - False(нашла в нете) вообще ничего не выводится, пробовала менять WordWrap, тоже без изменений.
Хочу что бы выводилось, по размеру формы...., а не так, как у меня

Добавлено спустя 13 минут 34 секунды:
Лекс Айрин писал(а):...- {$codepage UTF8}...
- вместо string - UnicodeString, char - UnicodeChar...
Вот так у меня Geany и начал выводить на консоль кириллицу (только букву "і" тоже не выводил), по этому и переключилась на Lazarus)
Яра писал(а):разобралась, но вот проброблемка. А как ее решить - не знаю. Если АvtoSize - False(нашла в нете) вообще ничего не выводится, пробовала менять WordWrap, тоже без изменений.
Замените Label на StaticText ( он на второй вкладке Additional иконка [abc] ).
.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Яра писал(а):Хочу что бы выводилось, по размеру формы...., а не так, как у меня
Автосайз формы, плюс в редакторе привязок лабел привяжи по левой и правой сторонам формы. Правда, размер шрифта может поплыть.
Яра писал(а):по этому и переключилась на Lazarus)
Потому что нужно использовать украинскую кодировку -- cp866 тут не совсем подходит, так как не все символы в ней есть.
Лекс Айрин писал(а):Автосайз формы, плюс в редакторе привязок лабел привяжи по левой и правой сторонам формы. Правда, размер шрифта может поплыть.
Отчет...

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

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