Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Кодовая страница  [new]
Rusinov St
Member

Откуда:
Сообщений: 24
Народ, подскажите. Подключаю в проект табличку в DOS-кодировке. Лиса предлагает выбрать кодировку, ставлю 866 - все ОК. Данные в запущенном приложении отображаются нормально. Но если, взять и тупо удалить dbf-ник, а затем скопировать другой (с той же структурой), появляются иероглифы. Как программно установить нужную кодировку? Не будет же юзер сам уточнять кодировку, всякий раз, когда производит замену dbf-файл.
17 июн 05, 09:53    [1627540]     Ответить | Цитировать Сообщить модератору
 Re: Кодовая страница  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
http://www.foxclub.ru/sol/index.php?act=view&id=269
17 июн 05, 10:05    [1627585]     Ответить | Цитировать Сообщить модератору
 Re: Кодовая страница  [new]
Rusinov St
Member

Откуда:
Сообщений: 24
Теории по ссылки предостаточно, но не более того. Попробую уточнить вопрос: приложение использует таблицы как в Win-кодировке, так и в DOS-кодировке. Проблема с последними. У них вобще отсутствует кодовая страничка (метка). Поэтому возникает вопрос, КАК ПРОГРАММНО ее установить. Автор (по ссылке) лишь указывает на суть проблему и предлагает решение "установить 866 код.страницу" для таких таблиц, - меня интересует КАК (программно).
У пользователя уже есть такие таблички (с неустановленными кодовыми страницами), которые периодически он будет "закидывать" в папку с моим приложением. Поэтому и возник вопрос программной установки 866 код.стр.
20 июн 05, 05:24    [1632233]     Ответить | Цитировать Сообщить модератору
 Re: Кодовая страница  [new]
Станислав C.
Member

Откуда: Екатеринбург
Сообщений: 1030
Rusinov St
возник вопрос программной установки 866 код.стр.


Для этого придется программировать на "низком уровне".
В заголовке dbf-файла есть байт, отвечающий за кодовую страницу (вроде бы 29-й по порядку следования). Старые приложения (Clipper, FoxPro до версии 2.6) этот байт не писали (да тогда и Windows не была еще так сильно распространена). Поэтому и возникает проблема...
В общем-то решение простое:
- открыть по fopen() dbf-файл;
- считать 29 байт при помощи функции fread(). Если он не равен 0, то не проводить конвертацию. Если же он равен 0, то установить его в нужное состояние (конкретное значение этого байта можно посмотреть в файлах, сконвертированных Фоксом в автоматическом режиме) при помощи функции fwrite();
- закрыть файл при помощи fclose().
- открыть файл стандартно при помощи use и наслаждаться...
20 июн 05, 06:59    [1632269]     Ответить | Цитировать Сообщить модератору
 Re: Кодовая страница  [new]
Rusinov St
Member

Откуда:
Сообщений: 24
Народ, большое спасибо!
20 июн 05, 07:11    [1632278]     Ответить | Цитировать Сообщить модератору
 Re: Кодовая страница  [new]
Maltsev Max
Member

Откуда: Россия, Пермь
Сообщений: 352
Все намного проще.

В стандартной поставке VFP есть прога: CPZERO.prg

Она переустанавливает кодовую страницу.
20 июн 05, 09:10    [1632377]     Ответить | Цитировать Сообщить модератору
 Re: Кодовая страница  [new]
Urri
Member

Откуда: Москва
Сообщений: 2693
Maltsev Max
Все намного проще.
В стандартной поставке VFP есть прога: CPZERO.prg
Она переустанавливает кодовую страницу.

... используя для этого как раз тот самый, описанный Станиславом C., механизм. ;-)
20 июн 05, 10:04    [1632492]     Ответить | Цитировать Сообщить модератору
 Re: Кодовая страница  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Rusinov St
Теории по ссылки предостаточно, но не более того. Попробую уточнить вопрос: приложение использует таблицы как в Win-кодировке, так и в DOS-кодировке. Проблема с последними. У них вобще отсутствует кодовая страничка (метка). Поэтому возникает вопрос, КАК ПРОГРАММНО ее установить. Автор (по ссылке) лишь указывает на суть проблему и предлагает решение "установить 866 код.страницу" для таких таблиц, - меня интересует КАК (программно).

А ты не заметил в этой статье упоминание о такой программке CPZERO.PRG?

DO (home()+"TOOLS\CPZERO\CPZERO.prg") with "MyTable.dbf",866
20 июн 05, 10:05    [1632494]     Ответить | Цитировать Сообщить модератору
 Re: Кодовая страница  [new]
Rusinov St
Member

Откуда:
Сообщений: 24
Да, заметил)
Уже давно разобрался. Большое всем спасибо!
5 авг 05, 08:34    [1765808]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить