MySQL, UTF и русские символы

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

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

Re: MySQL, UTF и русские символы

Сообщение arriah » 29.06.2016 20:55:29

О моя крыша....

Объясните мне как такое может быть:

есть строка: <a href="domen.ru">Ссылка</a>
Есть функция моя, которая вытаскивает все что находится между указанными символами, выполняю ее:
Код: Выделить всё
str:=SearchStr(str,'>','<')

в переменной str получаю: >Ссылка<
далее: delete (str,1,1)
получаю Ссылка<
далее: delete(str,pos('<',str),1);
получаю: ?сылка<
делаю delete(str,pos('<',str),0);
получаю Ссылка

Где собака роется, в каком месте, ну где же логика ?

Добавлено спустя 2 часа 15 минут 6 секунд:
Убейте меня :)

Добавил в проект {$codepage UTF8}
Это решило все мои проблемы...
Думаю надо еще раз потестить - удаляю {$codepage UTF8} - и о чудо, все нормально работает....

Где-то наверное порписываются ключи компилиятора? Как их удалить? Делал "Очистить и собрать.." не помогает
arriah
новенький
 
Сообщения: 94
Зарегистрирован: 29.07.2015 16:42:35

Re: MySQL, UTF и русские символы

Сообщение resident » 29.06.2016 23:46:22

arriah писал(а):Где собака роется, в каком месте, ну где же логика ?

В Delete параметр-ссылка (что подразумевает изменение данных) и в этой же процедуре еще параметр позиции. Далее вы используете одну и туже переменную в качестве аргумента передав ссылкой и этуже переменную для поиска позиции, которая будет аргументом в тойже процедуре. Как-то это всё стремно.
Тогда два варианта:
1) Или добавить промежуточные переменные похожие на:
Код: Выделить всё
i := pos('<',str)

Тут еще проверил бы промежуточные и для самих строк.
2) Или вместо Delete всё на Copy переделать, где по ссылке ничего не передать.
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: MySQL, UTF и русские символы

Сообщение arriah » 30.06.2016 00:13:27

resident писал(а):В Delete параметр-ссылка (что подразумевает изменение данных) и в этой же процедуре еще параметр позиции. Далее вы используете одну и туже переменную в качестве аргумента передав ссылкой и этуже переменную для поиска позиции, которая будет аргументом в тойже процедуре. Как-то это всё стремно.

Уффф.... вы гений, оказывается собака порылась в моей голове... пора спать :)

Естественно при таком коде будут ошибки:
Код: Выделить всё
         str1:=SearchStr(str,'<a ','</a>');
         str2:=SearchStr(str1,'>','<');
         delete(str2,1,1);
         delete(str2,pos('<',str1,1); //вот тут ошибся, надо было вместо str1 написать str2


поправил - заработало все :)

Проверил по поводу промежуточной переменной. Действительно, все работает нормально в delete.
Хотя если использовать copy (которая не подразумевает изменение данных в таком виде:
Код: Выделить всё
str1:=copy(str, pos('>',str)+1,pos('>',str)-pos('<',str)-1);

то возвращается пустая строка, если же pos заменить на промежуточные переменные, то работает нормально.
Вот такой вот Лазарь )
У меня просто привычка не плодить лишних переменных, вот и пишу так...
arriah
новенький
 
Сообщения: 94
Зарегистрирован: 29.07.2015 16:42:35

Re: MySQL, UTF и русские символы

Сообщение resident » 30.06.2016 01:01:38

arriah писал(а):то возвращается пустая строка, если же pos заменить на промежуточные переменные, то работает нормально.

Здесь то вроде передача по значению, и все равно не работает. Мне кажется там какая-то проблема у Лазаруса именно со строками UTF-8. Но с промежуточными вроде всё всегда и везде работает. Кстати, я оптимизацию компилятора в параметрах проекта отключаю. Т.к. оптимизатор может сам выкинуть промежуточные переменные. А без оптимизации ему приходится создавать всё.

Добавлено спустя 6 минут 25 секунд:
Да и сама форма ввода варианта оптимизации намекает, что могут быть проблемы.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: MySQL, UTF и русские символы

Сообщение arriah » 30.06.2016 01:20:42

resident писал(а):Кстати, я оптимизацию компилятора в параметрах проекта отключаю. Т.к. оптимизатор может сам выкинуть промежуточные переменные. А без оптимизации ему приходится создавать всё.

Оптимизация у меня тоже выключена. С включенной проблемы возникают иногда. Уже не помню на чем спотыкался.
arriah
новенький
 
Сообщения: 94
Зарегистрирован: 29.07.2015 16:42:35

Пред.

Вернуться в Lazarus

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

Сейчас этот форум просматривают: Google [Bot] и гости: 233

Рейтинг@Mail.ru