![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
dbf и Юникод [D5, D6, dBase, FoxPro]
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 - ещё хуже получилось.