Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.01.20;
Скачать: CL | DM;

Вниз

dbf и Юникод   Найти похожие ветки 

 
Fin ©   (2007-09-09 00:18) [0]

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


 
Германн ©   (2007-09-09 01:21) [1]


> После чего пытаюсь прочитать этот файл из своей программы

А разве Д5 или Д6 когда-либо умели показывать юникод?


 
Anatoly Podgoretsky ©   (2007-09-09 01:26) [2]

> Германн  (09.09.2007 01:21:01)  [1]

Но dbf и не может хранить Юникод в текстовых полях, не расчитан.


 
sniknik ©   (2007-09-09 01:28) [3]

еще спросте, а умеет ли 1С выгружать в dbf в юникоде...


 
Anatoly Podgoretsky ©   (2007-09-09 01:29) [4]

> sniknik  (09.09.2007 01:28:03)  [3]

Конечно не умеет, но автор так считает.


 
Германн ©   (2007-09-09 01:32) [5]


> Anatoly Podgoretsky ©   (09.09.07 01:29) [4]

Так автору сказали "спецы" из 1С :-)


 
Fin ©   (2007-09-09 10:49) [6]

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


 
Fin ©   (2007-09-09 11:09) [7]

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


 
sniknik ©   (2007-09-09 12:29) [8]

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

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

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


 
Anatoly Podgoretsky ©   (2007-09-09 12:36) [9]

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

Что такое dbf?


 
Fin ©   (2007-09-09 19:46) [10]


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

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


 
Anatoly Podgoretsky ©   (2007-09-09 19:52) [11]

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

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


 
Fin ©   (2007-09-09 19:55) [12]

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


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

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


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


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

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


 
Fin ©   (2007-09-09 20:06) [15]

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


 
sniknik ©   (2007-09-09 20:08) [16]

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

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


 
sniknik ©   (2007-09-09 20:11) [17]

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

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


 
Fin ©   (2007-09-09 20:16) [18]

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


 
Anatoly Podgoretsky ©   (2007-09-09 20:16) [19]

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


 
Anatoly Podgoretsky ©   (2007-09-09 20:20) [20]

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

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


 
Anatoly Podgoretsky ©   (2007-09-09 20:22) [21]


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

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


 
Fin ©   (2007-09-09 20:34) [22]

Да через 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:40) [23]

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

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


 
sniknik ©   (2007-09-09 20:50) [24]

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

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

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


 
Fin ©   (2007-09-09 21:48) [25]

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



Страницы: 1 вся ветка

Текущий архив: 2008.01.20;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.018 c
15-1197295733
Riply
2007-12-10 17:08
2008.01.20
Результат трехчасовых поисков ошибки в проекте :)


2-1197896157
niKo
2007-12-17 15:55
2008.01.20
общие ресурсы


2-1197947467
mrFreeman2007
2007-12-18 06:11
2008.01.20
Воспроизведение видео в отдельном окне


2-1198163147
Stepper
2007-12-20 18:05
2008.01.20
Как сделать счетчик строк в RichEdit1.Lines.Add...


10-1141419809
DillerXX
2006-03-04 00:03
2008.01.20
IWebBrowser2 и FTP