TStrings

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

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

TStrings

Сообщение stikriz » 28.04.2009 22:02:50

Объясните, пожалста, тупому в какой кодировке TStrings хранит строки?
Вставляю в TMemo текст, перебираю построчно - строк больше :-) Смотрю - появились лишние разрывы строки и пропадают символы...
А внешне - в окне программы все правильно показано.
В UTF8? А зачем объявлено как string? Есть же тип UTF8... Или что там?
В оьбщем, мне надо работать с AnsiString и чтобы из буфера обмена вставляло win1251.
Аватара пользователя
stikriz
энтузиаст
 
Сообщения: 612
Зарегистрирован: 15.03.2006 09:37:47

Re: TStrings

Сообщение Mr.Smart » 28.04.2009 22:47:25

Объясните, пожалста, тупому в какой кодировке TStrings хранит строки?

Ну почему же так резко! Для отображения строк используется кодировка UTF-8.
Впринцепе в TStrings т.е. в производных он него строки могут хранится в любой кодировке. Для отображение этих строк в компонентах используется только кодировка UTF-8.
Если втавка из буфера обмена производится средствами (как я понимаю) Windows то проблем небудет компонент (в данном случае TMemo) всё отработает на автомате.

п.с. Для работы со строками пользуйтесь функциями UTF8ToSys и SysToUFT8 из модуля LCLProc. Данные функции являются кросс платформенные (Модное слово :wink: ) и в случае если в ОС используются кодировка отличная от cp-1251 все отрнаботает адекватно!

Добавлено спустя 3 минуты 23 секунды:
Да и кстати пока (я надеюсь) в FreePascal UTF8String соответствует AnsiString и String и даже ShortString! Вобщем пока нет различия между данными типами строк (кодировок)!
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: TStrings

Сообщение stikriz » 29.04.2009 09:34:00

Все было бы хорошо, если бы оно не вставляло несуществующие переводы строк.
Я еще раз повторяю, что после вставки там появляются переводы строк, которых в тексте нет.
В Count количество строк больше, чем в тексте. Вот такая ерунда...
Пусть бы там и UTF8 был, но правильный, а то получается, что при приеме строк в компонент некоторые последовательности символов считаются не двухбайтовыми, а одлнобайтовыми как и должно быть в string, и если в них есть код 13, то автоматом ставит перевод строки. Это бага? Я думаю, что бага.
В Delphi такого не происходит никогда...
Если я начну по строкам бежать и переводить их в win1251, то у меня все равно будут лишние строки.
Сейчас под рукой нет Лазаруса. Надо бы посмотреть, если Text сразу целиком перекодировать как одну строку, будет-ли нормально.
Аватара пользователя
stikriz
энтузиаст
 
Сообщения: 612
Зарегистрирован: 15.03.2006 09:37:47

Re: TStrings

Сообщение Vadim » 29.04.2009 10:35:40

Специально, ради интереса, проверил то, что Вы говорите - вставил с помощью Ctrl+C и Ctrl-V многострочный текст в кодировке cp1251 из файла в TMemo. Клятвенно Вас заверяю - сколько строк было в файле, именно столько и вставилось в TMemo. Перевод строк досовский - #13#10. Ни одного лишнего перевода строки не вставилось.
stikriz писал(а):В Delphi такого не происходит никогда...

В Lazarus'е тоже. :)
Выложите сюда Вашу программу и текстовый файл, из которого Вы вставляете текст. И напишите версию Lazarus и FPC.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: TStrings

Сообщение stikriz » 29.04.2009 10:43:03

Вечером выложу.
Если нетрудно, то вставьте туда из блокнота вот такой текст:
lala+' : '+lala

Должно разорваться после двоеточия. Можно прямо отсюда скопировать.
Аватара пользователя
stikriz
энтузиаст
 
Сообщения: 612
Зарегистрирован: 15.03.2006 09:37:47

Re: TStrings

Сообщение Vadim » 29.04.2009 11:21:53

stikriz
Нет, не разрывается. В мемо оно одной строкой вставилось.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: TStrings

Сообщение Mr.Smart » 29.04.2009 11:28:05

Попробуй поиграть свойством TextLineBreakStyle оно определяет какие символы являются концом строки (TTextLineBreakStyle = (tlbsLF,tlbsCRLF,tlbsCR);)
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: TStrings

Сообщение stikriz » 29.04.2009 11:37:37

Это так видно в мемо.
А что в count?
Аватара пользователя
stikriz
энтузиаст
 
Сообщения: 612
Зарегистрирован: 15.03.2006 09:37:47

Re: TStrings

Сообщение Vadim » 29.04.2009 13:00:31

stikriz писал(а):А что в count?

Как и видно - в count ровно одна строка.

Добавлено спустя 8 минут 8 секунд:
Проверьте у себя мою программу - при вставке строк в мемо внизу появляется количество строк.
http://212.41.1.157/img/files/project1.zip
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru