Русский язык + Lazarus + Linux

Вопросы программирования и использования среды Lazarus.

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

Сообщение debi12345 » 14.04.2007 14:27:55

Случайно опция компилятора "-Fcutf8" при сборке проекта не нужна ? Только с этой опцией строковые константы в кодировке UTF8, вписанные прямо в коде ( текст MessageBox,..) безо всяких "Localize" - будут приняты и откомпилированы. Опция стала рабочей отностительно недавно ( Мартин, автор MSE* - довел ее до ума ).
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5672
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение ab » 14.04.2007 22:41:12

Attid писал(а):окружение у меня utf8
lazarus запускается скриптом с локалью 1251
...
где грабли ?

iii. This unit tested with dc_utf8 and user's locale koi8-r only
У меня нет такой локали, могу только теоретически подсказать, по аналогии с koi8r, т.к. здесь сталкивался с такой же проблемой (было еще line too long).
Для исправления ошибки я бы:
1. проверил, что возвращает GetCodeset из-под IDE: должно сответствовать (но не обязательно совпадать) константе DEV_CODESET - ее значение тоже можно проверить.
2. проверил, что возвращает GetCodeset и DEV_CODESET при запуске без IDE. В этом случае они должны быть разные: между этими кодировками и происходит конвертирование.
3. проверил, работает ли iconv из shell между этими кодировками (должно). Если да, то
4. проверил, работает ли связка
Код: Выделить всё

  function uiconv(ic_usr:pointer; source:ansistring):ansistring ;
  function uiconv_open(ic_from, ic_to:ansistring):pointer ;
  //здесь ic_from будет CP1251(DEV_CODESET) ic_to - UTF8(GEtCodeset)
  procedure uiconv_close(ic_usr:pointer) ;

5. Если да, то внимательно изучил бы строку, которая возвращается от _iconv. В ней могут быть недопустимые символы, которые не воспринимает загрузчик формы.
Если нет, поработал бы со значениями
outlength,
outleft(!!!) и т.п. в теле _iconv. Дело в том, что я попытался сделать общую функцию для всех перекодировок за счет запасного объема. Кое-где мог и напутать.
6. Так или иначе все исправил бы и выложил сюда исправления к модулю
ab
незнакомец
 
Сообщения: 6
Зарегистрирован: 27.03.2007 00:50:05

Сообщение Attid » 15.04.2007 19:34:29

debi12345
Случайно опция компилятора "-Fcutf8" при сборке проекта не нужна ? Только с этой опцией строковые константы в кодировке UTF8, вписанные прямо в коде

не понятная опция у меня не нее очень сильно ругается
Код: Выделить всё
  cConst = 'пример констанкты';

uconst.pas(33,16) Error: Malformed UTF-8 string
uconst.pas(33,16) Error: UTF-8 code greater than 65535 found
uconst.pas(33,16) Error: Malformed UTF-8 string
uconst.pas(33,16) Error: Malformed UTF-8 string

поэтому как её едят я не знаю .


ab
при {$DEFINE DC_WIN} теперь запускается нормально под IDE
и без ошибки без IDE (исправил ошибки с локалями в системе)
но запускается с крокозяками
в консоль все выводится нормально
Код: Выделить всё
код :
  WriteLn('GetCodeset()',GetCodeset());
  writeln('Бла бла бла');
  writeln(Localize('Бла бла бла'));   
*****
initialization
  {$I fdesk.lrs}
  LocalizeForm('TfmDesk');
*****
$ LANG=ru_RU.cp1251 ./acdesk
GetCodeset()CP1251
��� ��� �
��� ��� �
###на форме все по русски
$ LANG=ru_RU.UTF-8 ./acdesk
GetCodeset()UTF-8
��� ��� �
Бла бла бла
###на форме кракозяки

кракозяки напоминают открытие ЮТФ файла в 1251 !

хотя опять же могут быть глюки дистрибутива.
ЗЫ а добавить локаль это всего одна строчка ;)
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2583
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение debi12345 » 16.04.2007 08:04:34

Attid писал(а):
Случайно опция компилятора "-Fcutf8" при сборке проекта не нужна ? Только с этой опцией строковые константы в кодировке UTF8, вписанные прямо в коде

не понятная опция у меня не нее очень сильно ругается

Если исходники в формате UTF8-сохраняются - без этой опции никак. Если в KOI/WIN - будут матюки.


при {$DEFINE DC_WIN} теперь запускается нормально под IDE
и без ошибки без IDE (исправил ошибки с локалями в системе)
но запускается с крокозяками

Блин, народ - ну пинайте команду - чтобы они данный вопрос радикально решили !!! Исходники в UTF8 и опция -Fcutf8 дают 100% работающее решения для ЛЮБОЙ операционки и локали.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5672
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение ab » 20.04.2007 21:49:28

Attid писал(а):при {$DEFINE DC_WIN} теперь запускается нормально под IDE
и без ошибки без IDE (исправил ошибки с локалями в системе)
но запускается с крокозяками
в консоль все выводится нормально
кракозяки напоминают открытие ЮТФ файла в 1251 !

хотя опять же могут быть глюки дистрибутива.

Скорее всего, это глюки Localizeform? Может быть, завтра попробую проверить.
Attid писал(а):ЗЫ а добавить локаль это всего одна строчка ;)

Какая:?
ab
незнакомец
 
Сообщения: 6
Зарегистрирован: 27.03.2007 00:50:05

Сообщение Attid » 22.04.2007 11:38:37

Какая:?

Код: Выделить всё
localedef -c -i ru_RU -f cp1251 ru_RU.cp1251

с правами рута

еще вопрос
гуиншое приложение определяет локаль нормально,
а вот консольное нет =(

консольное приложение возрощает
GetCodeset()ANSI_X3.4-1968
мой $ locale
LANG=ru_RU.UTF-8
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2583
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение alexs » 20.08.2007 09:00:39

ab
ты не будеш возражать если я включу твой модуль перекоировки в исходники rxFpc?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3960
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Русский язык + Lazarus + Linux

Сообщение Владимир » 26.12.2020 22:00:20

Всем доброго и с Наступающим!
Linux. Когда стоял Lazarus 1.0.8, сделал аналог LowerCase для кириллицы по тупому
Код: Выделить всё
s:String;
/////////////////////
if s = 'А' then
    s := 'а';
  if s = 'Б' then
    s := 'б';
  if s = 'В' then
    s := 'в';
  if s = 'Г' then
    s := 'г';     

Поставил 2.0.10 - перестало работать, теперь так
Код: Выделить всё
s:=Edit1.Text;//А - кириллица
  s:=s[1]+s[2];
  if s='А' then ss:='а';
  Label1.Caption:=ss;//а -кириллица

Понимаю, UTF8 - двухбайтовая кодировка, но что изменилось?
Владимир
постоялец
 
Сообщения: 324
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Русский язык + Lazarus + Linux

Сообщение Vadim » 27.12.2020 05:05:14

Владимир писал(а):но что изменилось?

Именно то, что Вы и написали:
Владимир писал(а):UTF8 - двухбайтовая кодировка

;-)
Правда двухбайтовая она для русского. Для латиницы она продолжает оставаться однобайтовой.
Код: Выделить всё
Var
  s, s1: string;
 
Begin
  s:='Карацупа';
  WriteLn(s);
  Writeln;
  Write(s[1]);
  Write(s[2]);
  WriteLn;
  s1:=s[1]+s[2];
  If s1='К' Then
  Begin
    s1:='к';
    WriteLn(s1)
  End
  Else
    WriteLn(s1);
end.

Screenshot_20201227_080050.png

Как видно, теперь в массиве символов 1 символ - это именно 2 байта (s[1] и s[2]), а не один, как это было раньше или как это есть сейчас для латиницы. Т.е. всё очевидно и понятно. ;-)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Vadim
долгожитель
 
Сообщения: 3938
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Русский язык + Lazarus + Linux

Сообщение Владимир » 27.12.2020 09:10:15

Vadim писал(а):Как видно, теперь в массиве символов 1 символ - это именно 2 байта (s[1] и s[2]), а не один, как это было раньше или как это есть сейчас для латиницы. Т.е. всё очевидно и понятно.


Собственно проблема в организации регистронезависимого поиска подстроки в строке, где может быть и латиница и кириллица с использованием AnsiPos().
Теперь что, "идти" по строке, выяснять одно- или двухбайтовый символ, приводить к нижнему регистру и искать... LowerCase для кириллицы еще не придумали?
Владимир
постоялец
 
Сообщения: 324
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Русский язык + Lazarus + Linux

Сообщение Снег Север » 27.12.2020 09:53:47

Владимир, давным давно добавлены UTF8UpperCase и аналогичные функции работы с UTF8. В модуле lazutf8.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2718
Зарегистрирован: 27.11.2007 16:14:47

Re: Русский язык + Lazarus + Linux

Сообщение Seenkao » 27.12.2020 09:56:30

Владимир, пользуйтесь юникодом. Там все символы LongWord. И переводите себе на здоровье из UTF8 в Unicode и обратно, если есть желание.
Seenkao
постоялец
 
Сообщения: 206
Зарегистрирован: 01.04.2020 03:37:12

Re: Русский язык + Lazarus + Linux

Сообщение Владимир » 27.12.2020 10:43:13

Снег Север писал(а):Владимир, давным давно добавлены UTF8UpperCase и аналогичные функции работы с UTF8. В модуле lazutf8

Спасибо, но в 2.0.10 не работает с кириллицей.

Добавлено спустя 3 минуты 5 секунд:
Seenkao писал(а):Там все символы LongWord. И переводите себе на здоровье из UTF8 в Unicode и обратно, если есть желание.

Спасибо, пробую.

Добавлено спустя 25 минут 45 секунд:
Снег Север писал(а):Владимир, давным давно добавлены UTF8UpperCase и аналогичные функции работы с UTF8. В модуле lazutf8.

Может я чего не понимаю, но под Linux Лазарус с некоторого времени уже под UTF8, а модуль lazUTF8 был написан как переходной?
Владимир
постоялец
 
Сообщения: 324
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Русский язык + Lazarus + Linux

Сообщение Vadim » 27.12.2020 11:48:07

Владимир писал(а):Спасибо, но в 2.0.10 не работает с кириллицей.

Да вроде работает...
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
begin
  label1.Caption:=UTF8UpperCase(Edit1.Text);
end;

Screenshot_20201227_144347.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Vadim
долгожитель
 
Сообщения: 3938
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Русский язык + Lazarus + Linux

Сообщение Владимир » 27.12.2020 11:57:58

Vadim писал(а):Да вроде работает...
О как! В новом проекте заработало... Спасибо! Разбираюсь со старым.
Владимир
постоялец
 
Сообщения: 324
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Пред.След.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru
cron