Как выделить символ из строки?

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

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

Ответить
А.Н.
постоялец
Сообщения: 230
Зарегистрирован: 13.03.2010 11:23:58

Как выделить символ из строки?

Сообщение А.Н. »

Как выделить из строки символ с определённым индексом?
Типа смешно, да?
Я как только не извращался, от такого: labelPTSSer.Caption[vn]
до такого:
Copy(Utf8Decode(labelPTSSer.Caption), vn, 1);
и ещё тупее.

Всё выделяет. За исключением русских букв. Ord(labelPTSSer.Caption[vn]) даёт какой-то непонятный код.
200 с чем-то, вроде. В ASCII - это символы рамки.
Пробовал UTF8Decode. Тоже самое. Всё работает, за исключением русских символов. :(
Причём, если просто работать с Caption, как со строкой, всё отображается нормально.

Что делать?
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Использовать функции для работы с кодировкой UTF-8 на пример:

Код: Выделить всё

uses LCLProc...
...
var
 s: String;
...
begin
  s:=UTF8Copy(labelPTSSer.Caption,1,1);
end;
...

или раз вы уже решили использовать WideString:

Код: Выделить всё

var 
  c: WideChar;
...
begin
  c:=Utf8Decode(labelPTSSer.Caption)[1];
end;
...


А.Н. писал(а):Типа смешно, да?

Не смешно. Не поняв кодирование UTF8 вы будете задавать кучу очевидных вопросов. И не мешало бы ещё пользоваться поиском по форуму.
А.Н.
постоялец
Сообщения: 230
Зарегистрирован: 13.03.2010 11:23:58

Сообщение А.Н. »

c:=Utf8Decode(labelPTSSer.Caption)[1];

LazReport показывает мне коды символов, а ShowMessage пустоту. Естественно, что в случае с латиницей и цифрами, всё в порядке. :-\

Не смешно. Не поняв кодирование UTF8 вы будете задавать кучу очевидных вопросов. И не мешало бы ещё пользоваться поиском по форуму.

Я очень давно про него читал. Толком так и не разобрался. Не могу же я разбираться во всём?
К тому же, кодировок куча. Есть ещё этот чёртов UNICODE. Utf16, куча других кодировок...
А у меня и так уже времени нет, ничего не сделано, да и помойка везде... :(

Ещё "сюрприз" с кодировками. Часа полтора парился.

s:=UTF8Copy(labelPTSSer.Caption,1,1);

Спасибо огромное. Работает. :)
Но очень неочевидно. По идее, если [] работает для латиницы, то ожидаешь, что он будет нормально работать для всей таблицы.
Плюс, этот модуль не включается автоматически.
Да, код UTF8Copy посмотрел я, какой-то он слегка дикий... o.O
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Почитайте внимательно http://ru.wikipedia.org/wiki/UTF-8, довольно всё просто.
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

А.Н.
Если вы используете кодировку UTF8 - заубдьте про проямое обращение к символу по индексу в массиве. Только через функции UTF8XXXXX (delete/copy...)
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

А.Н. писал(а):Не могу же я разбираться во всём?

Есть такое слово, которое помогает во всём разобраться - "НАДО". :) Если надо в чём-то разбираться, Вы должны в этом разобраться, других путей нет. ;)
Ответить