Модератор: Модераторы
Attid писал(а):окружение у меня utf8
lazarus запускается скриптом с локалью 1251
...
где грабли ?
 
  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) ;
Случайно опция компилятора "-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код : 
  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
��� ��� �
Бла бла бла
###на форме кракозяки 
Attid писал(а):Случайно опция компилятора "-Fcutf8" при сборке проекта не нужна ? Только с этой опцией строковые константы в кодировке UTF8, вписанные прямо в коде
не понятная опция у меня не нее очень сильно ругается
при {$DEFINE DC_WIN} теперь запускается нормально под IDE
и без ошибки без IDE (исправил ошибки с локалями в системе)
но запускается с крокозяками
Attid писал(а):при {$DEFINE DC_WIN} теперь запускается нормально под IDE
и без ошибки без IDE (исправил ошибки с локалями в системе)
но запускается с крокозяками
в консоль все выводится нормально
кракозяки напоминают открытие ЮТФ файла в 1251 !
хотя опять же могут быть глюки дистрибутива.
Attid писал(а):ЗЫ а добавить локаль это всего одна строчка ;)
Какая:?
localedef -c -i ru_RU -f cp1251 ru_RU.cp1251s:String;
/////////////////////
if s = 'А' then
    s := 'а';
  if s = 'Б' then
    s := 'б';
  if s = 'В' then
    s := 'в';
  if s = 'Г' then
    s := 'г';      s:=Edit1.Text;//А - кириллица
  s:=s[1]+s[2];
  if s='А' then ss:='а';
  Label1.Caption:=ss;//а -кириллицаВладимир писал(а):но что изменилось?
Владимир писал(а):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.Vadim писал(а):Как видно, теперь в массиве символов 1 символ - это именно 2 байта (s[1] и s[2]), а не один, как это было раньше или как это есть сейчас для латиницы. Т.е. всё очевидно и понятно.
Снег Север писал(а):Владимир, давным давно добавлены UTF8UpperCase и аналогичные функции работы с UTF8. В модуле lazutf8
Seenkao писал(а):Там все символы LongWord. И переводите себе на здоровье из UTF8 в Unicode и обратно, если есть желание.
Снег Север писал(а):Владимир, давным давно добавлены UTF8UpperCase и аналогичные функции работы с UTF8. В модуле lazutf8.
Владимир писал(а):Спасибо, но в 2.0.10 не работает с кириллицей.
procedure TForm1.Button1Click(Sender: TObject);
begin
  label1.Caption:=UTF8UpperCase(Edit1.Text);
end;Vadim писал(а):Да вроде работает...
О как! В новом проекте заработало... Спасибо! Разбираюсь со старым.
Сейчас этот форум просматривают: Yandex [Bot] и гости: 1