Кодировка полей в базе формата dbf

Модераторы: Romeo, Hawk, Absurd, WinMain, DeeJayC

Ответить
AleksP
Сообщения: 46
Зарегистрирован: 01 мар 2008, 22:33

Кодировка полей в базе формата dbf

Сообщение AleksP » 29 авг 2008, 23:57

База в формате dbf создается при помощи следующего кода:

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

DataModule2->Table1->Active = false;

DataModule2->Table1->DatabaseName = "";
DataModule2->Table1->TableName = "test.dbf";
DataModule2->Table1->TableType = ttDBase;

DataModule2->Table1->FieldDefs->Add(...);
Как установить кодировку для полей на кириллице при открытии базы в другом приложении на C++ Builder?

Аватара пользователя
Airhand
Сообщения: 234
Зарегистрирован: 06 окт 2005, 15:21
Откуда: Dnepropetrovsk

Re: Кодировка полей в базе формата dbf

Сообщение Airhand » 15 окт 2008, 12:08

Как установить кирилицу, я не знаю. Но лучше ею не пользоваться, т.к. другие проги могут её не понять и покалечить таблицу. Попробуй создавать таблицу скриптом SQL.

Аватара пользователя
WinMain
Сообщения: 912
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Re: Кодировка полей в базе формата dbf

Сообщение WinMain » 15 окт 2008, 13:01

Всё дело в том, что таблицы DBF используют кодировку OEM, т.е. для кириллицы это будет кодовая страница 866(MS-DOS), а в Windows-приложениях для русского языка используется кодовая страница 1251(ANSI). Поэтому перед записью текста в таблицу нужно выполнять конвертацию строк из одной кодовой страницы в другую. Можешь воспользоваться функцией CharToOem()
Приглашаю на свой сайт http://winmain.org

Serge_Bliznykov
Сообщения: 366
Зарегистрирован: 31 авг 2007, 02:06

Re: Кодировка полей в базе формата dbf

Сообщение Serge_Bliznykov » 15 окт 2008, 21:27

&quot писал(а):Всё дело в том, что таблицы DBF используют кодировку OEM, т.е. для кириллицы это будет кодовая страница 866(MS-DOS), а в Windows-приложениях
для русского языка используется кодовая страница 1251(ANSI).
не надо быть столь категоричным! всё не так ужасно. кодировку можно использовать любую. просто я на этих DBF уже не первую собаку дожёвываю... :-)
В заголовке DBF есть (и всегда был, ну, по крайней мере с 1994 года) байтик по смещению 29 (0x1D) - в этом байтике хранится кодовая таблица (для таблицы в кодировке 866 (MS-DOS) этот байтик равен 0x65, для кодировки 1251 - байтик 0xC9)

AleksP, насколько я понимаю, Вы с DBF работаете через TTable
значит, Вы работаете через BDE (кстати, далеко не самый лучший вариант ;-(( )
Вот заходите в настройки BDE через BDE Administrator и там настраивайте кодовую страницу для DBASE и Foxpro...
И реально подумайте, нужно ли Вам это устаревшее (я бы даже сказала - почти успошее BDE), или лучше использовать другие технологии?...

удачи.

______________________________________________________________________________________________

добавлено
тьфу на вас....
Airhand - что ж Вы некропостерством занимаетесь!?!? ;-( подняли тему. И кинулись люди отвечать...
а вопрос то был два месяца назад задан! AleksP небось уже и программу закончил и в отпуск ушёл, а Вы устраиваете ажиотаж... ;-(

Ответить