Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2008.01.20;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.044 c
15-1197727186
turbouser
2007-12-15 16:59
2008.01.20
Хоккей


6-1178618675
Glu
2007-05-08 14:04
2008.01.20
Вызов окна дозвона


11-1182503317
=BuckLr=
2007-06-22 13:08
2008.01.20
Взять Items[i] как из RichEdit RTF-строку


2-1198016303
Bpeguk
2007-12-19 01:18
2008.01.20
Перевёрнутые буквы


8-1172272208
arturich
2007-02-24 02:10
2008.01.20
Прочитать код с картинки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский