Изменить кодировку dbf файла

Обновлено: 05.07.2024

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.DBF

29-ый байтик 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)
для определения в какой кодировке файл можно использовать:

Посмотрите пожалуйста файл dbf не понятная кодировка никак не могу понять как его прочитать из 1с. файл dbf не понятная кодировка никак не могу понять как его прочитать из 1с. Вряд ли удастся его прочитать: мало того, что кодировка не определяется при просмотре в FAR как текст, так еще и формат нарушен - WinDBFview ругается на поврежденный заголовок. Это файл из базы Эпсилона,зашифрованный что ли какой то?
Ничего нельзя сделать с ним?

Для файлов дбф выгруженных из 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 ).

Читайте также: