Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

dbf и Юникод [D5, D6, dBase, FoxPro]


Страницы:   1 2

Fin ©   (2007-09-09 00:18:00) 

Извените если вопрос не совсем по теме форума.
Проблема в следующем.
в dbf файл из 1с выгружены данные в текстовом формате в кодировке юникод.
После чего пытаюсь прочитать этот файл из своей программы и вместо текста считываю совершенно "испорченный" текст.
Понимаю что проблема с кодировкой, но не сталкивался с таким. Кто сталкивался с подобным, поделитесь опытом решения проблемы.


Fin   (2007-09-09 21:48:00) [1]

[24] пытался и даже получилось :) всё оказалось намного проще... хотя надо кое что проверить...
по поводу 1с тоже не берусь судить насчёт того что справочная система неменялась со старых времён, я просто прочитал как написано.


sniknik   (2007-09-09 20:50:00) [2]

> P.S. жаль конечно что через bde не удалось :(
чего жалеть? ты же даже не пытался.

чего стоит попробовать другой langdriver, и найдя подходящий не меняя настроек BDE указывать его в сессии(или в датавасе, не помню уже) у себя в программе.

> основаны на встроенной в 1cv8.1 справочной системы.
которая (эта часть) не менялась судя по всему со времен версии 6.0 (если не 5, может быть и такая была...)
но тем не менее, сам 1С 7.х работает с файлами foxpro(свою базу держит), а выгружаемые по заголовкам вроде не отличаются... т.е. можно предположить, что используется тот же движок (и правда зачем 2 примерно одинаковых вставлять?).
вот индексов для таких выгружаемых при обмене не видел никогда, был бы показатель поточнее.


Anatoly Podgoretsky   (2007-09-09 20:40:00) [3]

> Fin  (09.09.2007 20:34:22)  [22]

Это ты как раз использовал БДЕ в самом плохом варианте.


Fin   (2007-09-09 20:34:00) [4]

Да через AdO всё нормально, только я использовал провайдер Provider=MSDASQL и при условии что в 1с формировал указав кодировку oem. В принципе вроде как вопрос решён, огромное спасибо.
P.S. жаль конечно что через bde не удалось :(
P.S.S. на счёт моих предположений на счёт dBase III они основаны на встроенной в 1cv8.1 справочной системы. вот маленькая цитата от туда
"Для работы с базами данных формата DBF (dBase III) в системе может использоваться специальный объект - XBase. Механизм работы с базами данных формата DBF предназначен для обеспечения возможности манипулирования ими непосредственно из встроенного языка 1С:Предприятия. Каждый объект XBase может быть связан с одним файлом базы данных."
Ещё раз спасибо.


Anatoly Podgoretsky   (2007-09-09 20:22:00) [5]


> поэтому и вариант сос меной метки понравился больше всего.

Нечего менять в dBase III поскольку там нет никаких меток.
Попробуй перейти на АДО и провайдера OLE DB for FoxPro это наверно будет лучшем решением, поскольку большое сомнение, что 1С делает таблицы формата dBase III


Anatoly Podgoretsky   (2007-09-09 20:20:00) [6]

Насчет языкового драйвера, если машинная кодировка 1251, то используй ANSI ASCII - в этом случает будет использоваться текущая кодировка машины. Все будет регулироваться региональными установками и шрифтами.
Там тоже могут быть свои тонкости.
Например у полей есть свойство transliterate поосторожнее с ним.

Когда тебе задают уточняющий вопрос, то никто не хочет над тобой посмеяться, а только уточняю, поскольку dbf значит не больше чем dat или любое другое расширение.


Anatoly Podgoretsky   (2007-09-09 20:16:00) [7]

Вот теперь ты уже точнее сказал, что такое dbf
Тогда, dBase III вообще не поддерживает понятие язык таблицы и работает только с понятием машинная кодировка.
Поэтому вопрос oem или Ansi уже закономерный, обрабатывающая программа уже сама интерпритирует и обрабатывает символы.


Fin   (2007-09-09 20:16:00) [8]

[16] насчёт смены langdriver, то я пробовал в bde поменять на другие не чего не вышло, да и к тому же есть куча других программ которые работают и как бы смена langdriver не повлияла на их работу, поэтому и вариант сос меной метки понравился больше всего.


sniknik   (2007-09-09 20:11:00) [9]

> хотя в документации написано "dBase III"
у него вообще нет меток кодовой страницы...

> Или я что то путаю?
как можно сказать если процесс "за кадром" и видится только результат(/интерпретация) притом изложенный не точно (юникод(!)).


sniknik   (2007-09-09 20:08:00) [10]

> но всё же, это формат файлов dBase.
вряд ли. раз выгружено/создан файл в 1С то скорее всего это foxpro как "родной" ему (может там и можно сменить тип, но... ты бы наверное знал если бы устанавливал нестандартный).

> [8] спасибо, да видимо самое лучшее решение действительно сменить метку.
вот так сразу? а другой langdriver установить что даже не попробуешь? (я вообщето метку вторым рекомендовал если первое не поможет...)


Fin   (2007-09-09 20:06:00) [11]

[11] Вы в этом смысле, прошу прощения.
Тогда точно утверждать не могу какой именно dbf хотя в документации написано "dBase III", при этом 1с при выгрузке позволяет задать режим кодировки базы.  oem или Ansi. Или я что то путаю?


Anatoly Podgoretsky   (2007-09-09 20:00:00) [12]


> вот почему навеяло что вопрос с сарказмом

Что теперь скажешь о сарказме, после того как огласил что такое dbf?


Anatoly Podgoretsky   (2007-09-09 19:59:00) [13]

"Метки" в файле различаются для dBase и FoxPro, для 866 они разные, а 1251 вообще не поддержан для dBase


Fin   (2007-09-09 19:55:00) [14]

[8] спасибо, да видимо самое лучшее решение действительно сменить метку.


Anatoly Podgoretsky   (2007-09-09 19:52:00) [15]

> Fin  (09.09.2007 19:46:10)  [10]

Раз это dBase то какой еще ansi (1251), dBase всех версий это не поддерживает, в отличии от ФоксПро, но тогда его уже не поддерживает БДЕ


Fin   (2007-09-09 19:46:00) [16]


> Anatoly Podgoretsky ©   (09.09.07 12:36) [9]
> > Fin  (09.09.2007 10:49:06)  [6]Что такое dbf?

вот почему навеяло что вопрос с сарказмом, но всё же, это формат файлов dBase.


Anatoly Podgoretsky   (2007-09-09 12:36:00) [17]

> Fin  (09.09.2007 10:49:06)  [6]

Что такое dbf?


sniknik   (2007-09-09 12:29:00) [18]

> все текстовые русские символы превращаются в #
бывает при неправильно выбранном langdriver-е либо неверной его работе (если он например решит ориентируясь на метку в файле что нужно менять символы для показа а на самом деле не нужно... т.е. при рассинхронизации кодировки и метки о ней)

выход собственно один из - подобрать langdriver, а если не поможет изменить метку в файле чтобы она соответствовала реальной кодировке записанного.

хотя можно еще по другому (3 вариант), сменить движок на такой который не обращает внимания на эти метки.


Fin   (2007-09-09 11:09:00) [19]

поправлюсь ещё хуже  получилось только в oem.
немного поясню из 1с в частности выгружается символ русская "C" а при открытии в delphi вижу символ i.
При выгрузке в oem все текстовые русские символы превращаются в #
Да ещё в bde langdriver выставлен dBASE RUS cp866 .


Fin   (2007-09-09 10:49:00) [20]

да похоже с юникодом я погрячился, но всё же, текст прочесть не удаётся, пробывал в 1с выгруджать как oem или Ansi - ещё хуже получилось.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо