[Решено] Проблема с кодировкой UIB + Firebird

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

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

[Решено] Проблема с кодировкой UIB + Firebird

Сообщение artkil » 02.12.2011 14:05:28

Здравствуйте.

Есть БД, в ней все данные в UTF8. Есть строковые литералы в программе, например:
Код: Выделить всё
var
s: string;
begin
s := 'пример' + qTemp.Fields['FField1'];
end.


В параметрах TUIBDatabase явно кодировку не задаю. И если например сохранить строку s в БД, например:

Код: Выделить всё
var
s: string;
begin
s := 'пример' + qTemp.Fields['FField1'];
qTemp.Close;
qTemp.SQL.Text := 'UPDATE Table1 SET FField1 = ' + QuotedStr(s);
qTemp.ExecSQL;
end.

То часть "пример" сохраниться кракозябрами, а та часть, которая была взята из БД сохраняется нормально.
Система: Ubuntu amd64. Все локали выставлены ru_ru.UTF8. Пробовал менять на ru_ru.CP1251, не помогло. В windows работает все нормально.
Помогите разобраться в чем дело.

Добавлено спустя 52 минуты 6 секунд:
Если можно пересобрать lazarus под другую локаль, то как это сделать?
artkil
незнакомец
 
Сообщения: 9
Зарегистрирован: 18.11.2011 14:07:29

Re: Проблема с кодировкой UIB + Firebird

Сообщение v-t-l » 02.12.2011 14:57:47

А как конкретно выглядят эти кракозябры (+ читаемый текст, пожалста).
v-t-l
энтузиаст
 
Сообщения: 741
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Проблема с кодировкой UIB + Firebird

Сообщение artkil » 02.12.2011 15:27:07

Порт 1. РќРѕСЂР�Р°

Дожно быть "Порт 1. Норма".

Добавлено спустя 2 минуты 45 секунд:
Задал кодировку у TUIBDatabase.CharacterSet=csWIN1251. Текст стал такой:

Порт 1. РќРѕСЂРјР°
Порт 1. Норма

Добавлено спустя 50 секунд:
По умолчанию кодировка у компонента выставляется csUTF8.

Добавлено спустя 1 минуту 55 секунд:
Я думаю что все дело в строковых константах, которые лазарус как-то не так кодирует, как в windows. Наверное способ кодировки зависит от локали.
artkil
незнакомец
 
Сообщения: 9
Зарегистрирован: 18.11.2011 14:07:29

Re: Проблема с кодировкой UIB + Firebird

Сообщение v-t-l » 02.12.2011 15:33:47

Возможно все дело в кодировке исходника - правой кнопкой в редакторе - "Параметры файла" - "Кодировка".
Ага, увидел Ваш ответ. Возможно дело в двойном перекодировании. Попробуйте определять строковые переменные как WideString или использовать UTF8Decode(s)+qTemp.Fields['Field1']
v-t-l
энтузиаст
 
Сообщения: 741
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Проблема с кодировкой UIB + Firebird

Сообщение artkil » 02.12.2011 15:35:20

Проверил через Firefox строку РџРѕСЂС‚ это UTF8 сохраненная как Win1251.

Добавлено спустя 49 секунд:
UTF8Decode делает только хуже. Строка РџРѕСЂС‚ разрастается еще в 2 раза.

Добавлено спустя 4 минуты 27 секунд:
Возможно все дело в кодировке исходника - правой кнопкой в редакторе - "Параметры файла" - "Кодировка".


Спасибо большое, помогло.
artkil
незнакомец
 
Сообщения: 9
Зарегистрирован: 18.11.2011 14:07:29


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru