Кодировка элементов управления

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

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

Кодировка элементов управления

Сообщение cdx » 28.05.2009 09:41:56

Доброе время суток.
Моя программа должна работать с DBF таблицей ('FoxPro'). После ввода в обычные текстовые поля и нажатия кнопки, текст должен занестись в таблицу. Проблема в том, что после того как я вставляю строки на русском языке, вставляются только половинки строки. При просмотре данных сторонней программой вижу непонятные символы. Как я понимаю элементы управления содержат с троки в UTF а кодовая страница DBF-ки 1251. Как заставить элементы управления возвращать текст в 1251? DBF что такое UTF не знает...
(З.Ы.: OS-Win2003,Lazarus-0.9.26.2, в проекте только TDBF, TEdit'ы и TDBGrid).
cdx
незнакомец
 
Сообщения: 5
Зарегистрирован: 28.05.2009 09:31:04

Re: Кодировка элементов управления

Сообщение Mr.Smart » 28.05.2009 09:43:50

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

Re: Кодировка элементов управления

Сообщение cdx » 28.05.2009 09:56:00

Mr.Smart писал(а):Самому перекодировать строки UTF8ToAnsi

Пробовал, при просмотре таблицы в DBFNavigator (смотрелка), строка нормальная, однако в моей программе TDBGrid в этом месте показывает пустую строку... Font->Charset:=RUSSIAN/ANSI/DEFAULT не помогают. Куда копать?
cdx
незнакомец
 
Сообщения: 5
Зарегистрирован: 28.05.2009 09:31:04

Re: Кодировка элементов управления

Сообщение Mr.Smart » 28.05.2009 11:36:37

TDBGrid - неумеет перекодировать данные

Добавлено спустя 3 минуты 26 секунд:
И изменение чарсета шрифта непоможет.
Заполняйте базу вручную без использования TDB* компонентов...
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Кодировка элементов управления

Сообщение cdx » 28.05.2009 11:47:22

Т.е. TDBGrid не реально заставить отображать 1251?

А глобально у проекта кодовую страницу можно поменять на 1251?
cdx
незнакомец
 
Сообщения: 5
Зарегистрирован: 28.05.2009 09:31:04

Re: Кодировка элементов управления

Сообщение Mr.Smart » 28.05.2009 12:02:56

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

Re: Кодировка элементов управления

Сообщение cdx » 28.05.2009 12:03:56

Спасибо. Попробую - отпишусь.
cdx
незнакомец
 
Сообщения: 5
Зарегистрирован: 28.05.2009 09:31:04

Re: Кодировка элементов управления

Сообщение Vadim » 28.05.2009 13:03:53

cdx
Может быть глобально поменять кодировку строк dbf'ки на UTF-8? Только длину поля надо увеличить в два раза.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Кодировка элементов управления

Сообщение alexmai » 28.05.2009 14:29:00

Во- первых переходите на 27 версию, она полностью в UTF8, 25 и 26 толком не работали ни с 1251 ни с utf8
Во-вторых если у вас dbf записан в кодировке 866, то стандартными функциями вы не обойдетесь.
Я сначала с дуру написал сам таблицу перекодировки из дос в 1251 и в utf8, но оказалось, что в библиотеке synaser, есть файл
synachar в котором есть функции перекодиорвки во что хочешь

uses ...,synachar
....
procedure TForm1.Button1Click(Sender: TObject);
var ss:string;
begin
ss:='Р_Р РёР_РчС'!';
ShowMessage(CharsetConversion(ss,utf_8,cp866));
end;
alexmai
постоялец
 
Сообщения: 106
Зарегистрирован: 02.02.2009 14:58:42

Re: Кодировка элементов управления

Сообщение cdx » 28.05.2009 19:13:48

alexmai писал(а):Во- первых переходите на 27 версию, она полностью в UTF8, 25 и 26 толком не работали ни с 1251 ни с utf8


Это значит задать свойство TableLevel:=27?
В доках по TDbf я такого не встречал... Но попробую.

Vadim писал(а):cdx
Может быть глобально поменять кодировку строк dbf'ки на UTF-8? Только длину поля надо увеличить в два раза.


Просто если я увеличу длину строки в 2 раза, то ширина колонки автоматом увеличится в 2 раза... Просто программа пишется для предприятия, где полно старых компьютеров, и основное разрешение на их 14" мониторах только 800х600. Хотелось бы чтобы, все колонки влезали в экран, а то не все работники додумываются, что ширину колонок можно менять... (Кто на похожих предприятиях работает, тот знает, что научить среднестатистическую тетку 50-лет делать что-либо новое на ПК очень сложно...) Да и DBF 25 версии, насколько я знаю, вообще не знает, что такое UTF8.
cdx
незнакомец
 
Сообщения: 5
Зарегистрирован: 28.05.2009 09:31:04

Re: Кодировка элементов управления

Сообщение Vadim » 28.05.2009 19:58:22

cdx писал(а):Это значит задать свойство TableLevel:=27?

Нет, это значит переходить на версию Lazarus 0.9.27.
cdx писал(а):Просто если я увеличу длину строки в 2 раза, то ширина колонки автоматом увеличится в 2 раза...

Чем меньше Вы будете доверять автоматам, тем лучше будет работать у Вас голова. :) Задавайте размеры колонок вручную. Мало ли какая у них может быть ширина. Вам ведь нужно, чтобы они визуально выглядели красиво, верно ведь? А это значит, что Вы должны подобрать их параметры вручную, затратив определённые усилия как дизайнер.
cdx писал(а):Да и DBF 25 версии, насколько я знаю, вообще не знает, что такое UTF8.

DBF'кам, между нами говоря, абсолютно наплевать в какой кодировке хранятся у них строки. Они сами ничего со строками не делают. DBF'ки - это не более чем хранилище, резервуар для всякого барахла. И что в них хранится, этому резервуару нет абсолютно никакого дела. Интерпретировать хранимое барахло в свою пользу - задача на 100% процентов программиста. Как Вы сделаете, так и будет. И раз уж Вы выбрали зачем-то DBF'ки, т.е. сами себе создали трудности, то и преодолевайте эти трудности, для этого у Вас есть все необходимые инструменты. ;)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Кодировка элементов управления

Сообщение svegreen » 04.05.2010 00:46:09

Подскажите, пожалуйста, а где взять этот synaser?

Добавлено спустя 6 минут 37 секунд:
Вроде бы нашел http://synapse.ararat.cz/

Добавлено спустя 3 часа 34 минуты 55 секунд:
Долго парился с synachar, ничего не получилось с кодировкой 866, потом нашел фишку - если просто добавить в uses LConvEncoding,то будут доступны функции типа UTF8ToCP1251, CP866ToUTF8 и т.п. Работают вроде нормально...

Это в Виндовс.
svegreen
незнакомец
 
Сообщения: 1
Зарегистрирован: 03.05.2010 23:20:17


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru