Изменить кодировку dbf файла
Kundor » 20.07.2006 (Чт) 9:10
Задача такая - прочитать периодически заменяемую базу в dbf формате dBaseIV. Я попробовал сделать так:===
Set conn = New ADODB.Connection
Dim RST As New ADODB.Recordset
Path = "c:\Projects\CommPlat\"
conn.Provider = "Microsoft.Jet.OLEDB.4.0"
ConnectionString = "Data Source=" + Path + ";Extended Properties=DBASE IV"
conn.Open (ConnectionString)
ComText = "Select * from LS"
RST.ActiveConnection = conn
RST.Open ComText, conn
StartForm.FIOText = RST!fio
===
в итоге в текстовом поле получаю кракозябры вместо русских букв . подскажите - как справится с этим?
HandKot » 20.07.2006 (Чт) 10:36
Попробуй вместо Microsoft.Jet.OLEDB.4.0 использовать VisualFoxPro driver
либо используй ODBC
Kundor » 20.07.2006 (Чт) 10:50
HandKot » 20.07.2006 (Чт) 11:39
а если так
Код: Выделить всё "Provider=VFPOLEDB.1;Data Source=C:\1;Password='';Collating Sequence=MACHINE"
а вообще, ПОИСК рулит, такие вопросы постоянно на форумах всплывают
Andrey Fedorov » 20.07.2006 (Чт) 12:56
Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=dBASE IV;Data Source=C:\DBF\MY.DBF29-ый байтик DBF-файла указывает на его кодировку. Для 866-ой странички он должен быть равен 0.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену.Kundor » 20.07.2006 (Чт) 14:42
Нечто вообще странное получается. Посмотрел одним dbf-viewer-ом эту базу - смотрю - а она в русском изображается с пометкой ansi.
приписал в проект такой код:
Public Declare Function CharToOem Lib "user32" Alias "CharToOemA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
Dim source As String, destination As String
Public Function T2T(sourcestring)
destination = Space(Len(sourcestring))
rc = CharToOem(sourcestring, destination)
смотрю destination - а там должна быть фамилия имя отчество - так всё переведено на русский нормально, за исключением больших первых букв - они латинские
в чём прикол с этой базой.
Здравствуйте!
прошу прощения, если не в теме.
помогите плиз. мне нужно сменить кодировку открывающегося *.DBF. Это окошко называется Code Page. Где его (окошко) найти можно.
Исправлено: VelkaGot, 21.07.08 13:18
извините, я с фокс про недавно
поясните
И что надо пояснить? Команды в окне Command писать умеете? Скопировать туда приведенный мной код можете? Подставить вместо слова file название своего файла можете?
Do CPZERO.prg with 'File', 866
866 - все равно карявки вместо букв русских открываются
CPZERO.prg - это что?
Исправлено: VelkaGot, 21.07.08 13:34
а это окошко нельзя выцарапать прямо из меню?
а не через командное окно
А его в меню и нет. Чем мешает командное окно? ЧТО вообще надо? Поменять кодировку или окно выбора кодировки? Какую задачу решаем?
мне нужно окно выбора кодировки.
но нужно постоянно - когда я захочу раз -открыла - сменила кодировку - раз обратно сменила кодировку.
И чем в таком случае не подходит приведенный мной код? Отдельного окна нет, есть программа с этим окном. Само окно кодировку не меняет, меняет программа. Программа с этим окном. Код вызова программы показан. Какой еще велосипед Вы собрались изобрести?
я велосипеды не изобретаю. но по вашему коду мне выдается CPZERO.prg не возможно открыть.
а может вы мне ответите сто это такое - CPZERO.prg
Это программа, идущая с фоксом в стандартной поставке начиная еще с версии 2.0 и лежащая обычно в его родном каталоге.
Надо полный путь доступа указывать. Как к программе CPZERO.prg, так и к файлу DBF, кодовую страницу которого надо поменять.
Полный путь доступа к CPZero.prg можно определить при помощи функции Home()
Второй параметр - это кодовая страница, которую надо установить
866 - DOS RUS
437 - DOS Eng
1251 - Win Rus
1252 - Win Eng
Надеюсь, Вы в курсе, что изменение кодовой страницы не изменяет содержимое файла. Это всего-лишь изменение некоего признака, метки, на основании которой среда интерпретирует (читает) содержимое файла. Но само содержимое от этого никак не меняется.
ага, спасибо большое всем
вроде получилось
как в дбф таблице удалить всю строку целиком??
Кстати, "не целиком" она и не удаляется.
Исправлено: ssa, 22.07.08 13:08
Delete - строки помечаются черным прямоугольником
а как дальше -что бы физически этих строк небыло?
Насколько я знаю, формат OEM мы не используем. Осталось с предыдущих времен.
Только вот что-то мне подсказывает, что проблема ниразу не в кодировке.
Что касается "У тех, кому отправляем, ничего не получается" - предложите детально описать, что конкретно не получается. Это не описание проблемы и за такое пора бы уже заказчиков отстреливать.
(2)да, OEM - это DOS-кодировка. А что-то внятное вынудить бесполезно, я бился с описаниями полей два дня, пришлось с бубном прыгать. Просто уже жалко затраченного времени и сил. А с выбором у меня чуть проще, примерно так:
Вы же не просто строку с формы забираете, так ведь?
(4) да вроде нет, все хорошо должно быть.
дам чуть больше информации - два файла DBF. Первый - мой, который с кроказябрами, второй - выгрузка из 7.7, с которым все пучком.Кто знает, как глянуть кодировку файла? Моя в ANSI (6)
qqqq.dbf - 0 (кодировка не задана)
123 (2).dbf - 866 (Russian MS-DOS) (7) спасибо большое, попробую сейчас сделать кодировку вручную, может с выбором накосячил (9)
Каталог = ЭлементыФормы.Каталог.Значение;
Файл = Новый XBase;
Файл.Кодировка = КодировкаXBase.ANSI;
.
Файл.СоздатьФайл(Каталог);
Файл.Записать(); (9) спасибо огромное, добрый человек. Поставил ОЕМ и все стало идеально.
(7) Вручную написал
Файл.Кодировка = КодировкаXBase.ANSI;
и все равно, посмотрите пожалуйста этот файл
Тоже маюсь с кодировкой, можно подробнее расписать, что нужно сделать? Вот у меня есть файл .Dbf.Вот что есть сейчас:
Что нужно вставить, чтобы текст читался и подставлялся в 1с нормально? Пробовал КодировкаXBase.ANSI и КодировкаXBase.OEM, не помогло, хотя может что не так делал.
(14) у меня похожая проблема ни в той ни в другой кодировке не показывает нормальный текст :((15)
для определения в какой кодировке файл можно использовать:
Ничего нельзя сделать с ним?
Для файлов дбф выгруженных из 7.7 для нормального чтения в 8
ФайлДБФ = Новый XBase;
ФайлДБФ.Кодировка = КодировкаXBase.OEM;
Если ФайлДБФ.Открыта() = Ложь Тогда
Сообщить("Указанный файл не доступен, или неверного формата. ");
Возврат;
КонецЕсли;
Описание использования библиотеки dbfpy для изменения кодировки данных и скрипт.
Для преобразования dbf из одной кодировки в другую можно использовать скрипт на языке Python (скачать скрипт). Эта статья описывает подготовку к работе, идею скрипта и как с ним работать.
Для работы скрипта необходимо иметь Python 2.5/2.6 и один раз скачать и установить библиотеку dbfpy. После загрузки библиотеки нужно выполнить:
Правильность установки библиотеки можно проверить запустив Python и выполнив:
Если все установлено нормально, ошибок эта команда выдать не должна.
В процессе работы, наш скрипт должен построчно проверять тип поля в исходном файле DBF и, если он строковый, т.е. есть вероятность того, что данные не в той кодировке, что нужно, осуществлять преобразование. Упрощенная версия скрипта на языке Python для перевода данных из кодировки в кодироввку выглядит следующим образом:
Утилита вызывается из командной строки и принимает несколько параметров:
- input — имя исходного файла dbf, который требуется преобразовать, обязателен
- output — имя конечного файла dbf, куда будет записан результат, обязателен
- -f (--from-code) — кодировка исходного DBF файла, не обязателен, по умолчанию UTF-8
- -t (--to-code) — кодировка выходного DBF файла, не обязателен, по умолчанию CP-1251
- -n (--no-subs) — переключатель, если установлен, то неизвестные символы пропускаются, если не установлен — заменяются на знаки вопроса («?»)
- -h (--help) — справка
- -v (--version) — версия программы
Конвертировать adygeya-admin-a.dbf в adygeya-admin-a2.dbf из кодировки UTF-8 в кодировку CP-1251.
или упрощенная запись параметров командной строки (эти кодировки и так являются кодировками на входе и выходе по умолчанию):
Если конвертер сталкивается с символом, который не может перекодировать, он по-умолчанию заменяет его на вопросительный знак («?»), если к строке запуска добавлен --no-subs (-n), то символ пропускается.
Если возникает другая ошибка при конвертации, конвертер выводит содержание записи на которой возникла ошибка в консоль и прекращает работу. Конечный файл создается неполным и для подмены оригинального в shape-файле непригоден.
Ошибка invalid syntax может быть связана с неправильным запуском скрипта, под Windows запуск нужно осуществлять из командного процессора («Пуск → Выполнить → cmd») после чего вводить команду указанную выше.
Нет отображаются русские буквы в DBFshow?
Если вместо русских букв в Вашем файле отображается нечто иное и непонятное, то можно попробовать следующие варианты:
1. Нужно поменять кодировку файла. В заголовке таблицы в 29 байте хранится информация о кодировке DBF файла. DBFShow на основании этого байт использует ту или иную кодировку. Заходим в меню «Разное\Кодировка» и пробуем выбрать другую кодировку. Для русского текста это либо 1251 — Russian Windows, либо 866-Russian OEM
Меняем кодировку, смотрим на результат. Естественно файл должен быть доступен для записи. Буквы RW внизу экрана. Получаем русские буквы.
Также в программе есть возможность автоматически проставлять код кодировки при открытии файлов DBF, если у файла значение кодировки равно 0. Для этого заходим в опции DBFSHow, ставим галочку на «Использовать кодировку по умолчанию», выбираем необходимую кодировку и программа будет исправлять значение кодировки при открытии файлов.
2. Если русские буквы не отображаются в названиях колонок, как например при выгрузке из Excel, то необходимо поставить галочку в пункте «Кодировка для русских колонок (из Excel)», (рисунок выше) выбрать необходимую кодировку и заново открыть файл.
Другие разделы FAQ, которые могут быть вам интересны:
Переконвертировать DBF из кодировки OEM в кодировку ANSI
Всем привет дорогие друзья. Столкнулся с такой проблемой, что файл формата DBF имеет кодировку OEM, соответственно, когда его открываю, то русские буквы отображаются корректно (если открывать через DBF-редактор), но как только я ставлю кодировку ANSI, то русские буквы превращаются в иероглифы. Кодировка ANSI мне нужна, чтобы загрузить файл в свой проект, так как он не может отобразить данные в кодировке OEM.
Простыми словами, мне необходимо переконвертировать DBF-файл в кодировке OEM в кодировку ANSI. Решение я нашел достаточно быстро. Вот какой у меня имеется файл на данный момент:
То есть, кодировка OEM – русские символы отображаются. Как Вы помните, мне необходимо кодировка ANSI, соответственно я ее устанавливаю и смотрим, что из этого получилось:
Все русские буквы превратились в иероглифы. В итоге, если я загружу в проект в таком виде, то будет иероглифами он отображаться, а если в кодировке OEM, то тоже будет отображаться иероглифами.
Чтобы решить данную проблему я скачал программу Редактор DBF, в которой необходимо открыть нужный файл и выполнить команду Действия-Перекодировка. Далее необходимо установить следующую кодировку и нажать на кнопку ОК:
Ждем окончания процесса и открываем готовый файл, после чего смотрим нашу кодировку и как отображаются символы в самом редакторе:
То есть, мы получили необходимый эффект: кодировка ANSI и русские буквы отображаются, как положено. Можно скачать, что с задачей мы справились на 100%. Да и еще, не забудьте прочитать также статью, как можно перекодировать кириллицу в UTF-8.
DBF Encoding - Кодовые страницы, поддерживаемые DBF Commander
Кодовая страница файла DBF может принимать одно из следующих значений:
Кодировки Windows:
- 874 Тайский Windows
- 932 Японская Windows
- 936 Китайский (КНР, Сингапур) Windows
- 949 Корейская Windows
- 950 Китайский (САР Гонконг, Тайвань) Windows
- 1250 Восточноевропейская Windows
- 1251 Русская Windows
- 1252 Окна ANSI
- 1253 Греческая Windows
- 1254 Турецкая Windows
- 1255 Еврейский Windows
- 1256 Арабский Windows
Кодировки MS-DOS:
- 437 Ед.С. MS-DOS
- 620 Мазовецкое воеводство (польское) MS-DOS
- 737 Греческий MS-DOS (437G)
- 850 Международный MS-DOS
- 852 Восточноевропейская MS-DOS
- 857 Турецкий MS-DOS
- 861 Исландский MS-DOS
- 865 Скандинавский MS-DOS
- 866 Русский MS-DOS
- 895 Каменицкий (Чешский) MS-DOS
Чтобы установить новую кодовую страницу для файла DBF , используйте команду «Установить кодовую страницу».
Вы также можете преобразовать файл DBF в кодировку UTF-8 (и наоборот, преобразовать файл UTF-8 DBF в файл ANSI DBF ).
Читайте также: