Delete, Length в Lazarus

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

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

Delete, Length в Lazarus

Сообщение GENI » 16.11.2008 21:29:34

Здравствуйте.
Я новичок в FPC/Lazarus.
Почему-то программа написанная в FPC/Lazarus не совсем понятно работает со строками содержащими русский текст.
Так например length при тексте 'Nikita' говорит - 6 символов, при тексте 'Никита' - 12 символов.
Delete вырезает всю строку, вместо части.
Как это понимать?
Стоит FPC 2.2.2, Lazarus 0.9.26 под Windows XP (VirtualBox)
GENI
новенький
 
Сообщения: 12
Зарегистрирован: 16.11.2008 20:54:30
Откуда: Arkhangelsk

Re: Delete, Length в Lazarus

Сообщение Brainenjii » 16.11.2008 21:38:56

не исключено, что проблемы из-за UTF8
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Delete, Length в Lazarus

Сообщение Alexx2000 » 16.11.2008 22:01:35

В Lazarus 0.9.26 используется кодировка UTF8. Соответственно каждый символ кириллицы занимает 2 байта.
Чтобы было нормально, используйте функции с префиксом UTF8 (UTF8Length, UTF8Delete и т.д.)
Или перекодировать в Ansi.
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 474
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

Re: Delete, Length в Lazarus

Сообщение GENI » 17.11.2008 11:54:28

А как перекодировать в ansi?
GENI
новенький
 
Сообщения: 12
Зарегистрирован: 16.11.2008 20:54:30
Откуда: Arkhangelsk

Re: Delete, Length в Lazarus

Сообщение B4rr4cuda » 17.11.2008 13:45:01

function Utf8ToAnsi(const s : UTF8String) : ansistring;
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: Delete, Length в Lazarus

Сообщение GENI » 17.11.2008 14:56:46

Спасибо люди.
GENI
новенький
 
Сообщения: 12
Зарегистрирован: 16.11.2008 20:54:30
Откуда: Arkhangelsk

Re: Delete, Length в Lazarus

Сообщение B4rr4cuda » 17.11.2008 16:44:53

Не за что.
Чаще нажимай Ctrl+Space. =)
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: Delete, Length в Lazarus

Сообщение GENI » 17.11.2008 19:57:07

А не помогает str1=Utf8ToAnsi(str1); Симптомы теже.
UTF8Length нет такого пишет.
GENI
новенький
 
Сообщения: 12
Зарегистрирован: 16.11.2008 20:54:30
Откуда: Arkhangelsk

Re: Delete, Length в Lazarus

Сообщение Mr.Smart » 17.11.2008 20:09:15

функции для работы с UTF8 содержатся в модуле LCLProc

Добавлено спустя 3 минуты 5 секунд:
если хочешь работать со старыми версиями функций преобразуй в Ansi кодировку
Код: Выделить всё
var
s: String;
...
begin
   s:=UTF8ToAnsi(<строка>);
   if Length(s)>10 then
    Delete(s,10,Length(s));
...
end;


Добавлено спустя 2 минуты 36 секунд:
а после преобразуй обратно в UTF8 функцией AnsiToUTF8
кстати для преобразование UTF8<->Ansi ещё есть фукции UTF8ToSys, SysToUTF8, которые делают тоже самое что и выше приведённые...
Mr.Smart
долгожитель
 
Сообщения: 1797
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Delete, Length в Lazarus

Сообщение GENI » 17.11.2008 20:46:47

Вот, теперь все работает. Я что-то не подумал, что надо обратно преобразовывать.
GENI
новенький
 
Сообщения: 12
Зарегистрирован: 16.11.2008 20:54:30
Откуда: Arkhangelsk

Re: Delete, Length в Lazarus

Сообщение Makhaon » 03.12.2018 16:56:11

Кто найдет, имейте в виду, что лучше использовать LazUTF8. LCLProc depricated.
Makhaon
новенький
 
Сообщения: 20
Зарегистрирован: 08.08.2018 15:23:24

Re: Delete, Length в Lazarus

Сообщение Лекс Айрин » 03.12.2018 17:02:37

Mr.Smart писал(а):кстати для преобразование UTF8<->Ansi ещё есть фукции UTF8ToSys, SysToUTF8, которые делают тоже самое что и выше приведённые...


Если хочешь сохранить здоровье, то лучше избегай их употребления. Они не всегда правильно понимают какая кодировка системная. Соответственно, можно долго думать из-за чего текст вдруг не читаем.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 4540
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru