![]() |
|
|
![]()
|
|
| Mikka85 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 30.3.2007 Репутация: нет Всего: нет |
Есть таблица dbf. Использую - ADO. Все русские буквы отображает кракозябрами.
Как решить проблему с досовской кодировкой ? Спасибо |
|||
|
||||
| bas |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 446 Регистрация: 14.8.2002 Где: Молдова, Кишинев Репутация: нет Всего: 2 |
Значение 30-го байта, который отвечает за используемую кодировку: $65 - Win, $26 - DOS rus , $00 какое?
Это сообщение отредактировал(а) bas - 10.5.2007, 17:44 |
|||
|
||||
| yours-tester |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 6.2.2005 Репутация: нет Всего: нет |
У меня такая же проблема.
Microsof DataGrig Control 6.0 (SP5) (OLEDB) + Microsoft ADO Data Control 6.0 (SP4) (OLEDB) ConnectionString: "Driver={Microsoft dBASE Driver (*.dbf)}; DriverID=277; Dbq=d:\\docs\\work\\vc++\\tempbases" RecordSource: Table1 Русскиие буквы отображает кракозяброй. Чем посмотреть этот самый тридцатый байт не знаю. Не писать же для этого специально программу? Но вот DBFView - плагин для Far правильно отбражает базу когда выбираю WIN кодировку... Какие дальше могут быть действия, чтобы решить проблему? |
|||
|
||||
| yours-tester |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 6.2.2005 Репутация: нет Всего: нет |
посмотрел я эти байты (оказалось встроенный вьювер Far умеет показывать файлы в 16тиричном виде, отсчет с 0) вообщем и 29 и 30 и 31 байты все имеют значение 0x00, только 28 единичка.
Наверное 1С 7.0 в которой был создан и использован это файл справочника, не использует этот байт для указания кодовой страницы, оно ей нафиг не надо. Что дальше мне надо править каким то образом файл? или можно каким либо образом объяснить ADO что надо использовать такую то конкретную кодовую страницу? |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 4 Всего: 118 |
может конвертить "на лету" самим? (пологаю что Far) делает так...
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| yours-tester |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 6.2.2005 Репутация: нет Всего: нет |
jonie, ты сам то понял что сказал? Как ты это себе представляешь?
А плагин DBFView, вряд ли использует ADO для своих задач |
|||
|
||||
| yours-tester |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 6.2.2005 Репутация: нет Всего: нет |
Короче говоря нашел я ещё один замечательный плагин для фара
HexEditor от Александра Пахотина, рекомендую http://plugring.farmanager.com/cgi-bin/dow...0&Draw=List С помощью этого шестнадцатеричного эдитора подправил в файлике с базой этот самый 29й а за одно на всякий случай и 30й и 28й байты. Попробовал три варианта 0хС9, 0х65, 0х26. Но проблемы это не решило, всё равно в DBGrid кракозябра... Ну может кто нибудь писал чего нибудь для работы с dbf через ADO? Может через коннект стринг можно драйверу насильно кодовую страницу указать? Добавлено через 12 минут и 4 секунды Кстати DBFView почему то считает что мой файл формата DBase III, а судя по тому что написано здесь: http://www.geocities.com/geoff_wass/dBASE/.../FAQ/qformt.htm 29й байт стал использоваться как Language Driver ID только DBase IV не раньше .... |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 4 Всего: 118 |
наткнулся в поисках на пару замечаний
http://www.sql.ru/forum/actualthread.aspx?...&tid=180672 http://www.sql.ru/forum/actualthread.aspx?...&tid=235081 ну и вообще порыскай там... а насчет HEX редакторов так их море.... HIEW решает 8) -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| yours-tester |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 6.2.2005 Репутация: нет Всего: нет |
Спасибо jonie....
Надо же по твоей ссылке нашел решение проблемы Было Можно: HKLM\SOFTWARE\Microsoft\Jet\4.0\Engines\Xbase\DataCodePage - OEM поменял на Можно: HKLM\SOFTWARE\Microsoft\Jet\4.0\Engines\Xbase\DataCodePage - ANSI Всё стало на свои места, кракозябры больше нет. Только уж очень мне всё это шаманство напоминает, какуя связь драйвер находит между аббревиатурами OEM и ANSI и кодовыми страницами WIN1251 или CP866? Может ли кто нибудь это разьяснить на уровне сознательного эго? |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 4 Всего: 118 |
OEM - это кодировка, используемая в DOS окнах (ака консоль) в винде. У нас это cp866
ANSI - это то что в винде используется. У нас CP1251. введено я так понимаю для "удобства абстракции"......т.е. на какой-нить беларусской винда это будут уже "слинкованы" с другими cpXXXX Это сообщение отредактировал(а) jonie - 16.6.2007, 12:15 -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| Pumer |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 20.1.2008 Репутация: нет Всего: нет |
Можно открыть DBF файл в программе DBFNavigator.
Затем: Файл->Сменить кодировку и выбрать Dos -> Win или Win -> Dos. Зависит от того из какого в какой формат требуется преобразовать базу. После чего сохраняем базу и пользуемся преобразованной базой. Вот |
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: нет Всего: 130 |
А ещё можно поставить FoxPro и перекодировать естественным образом! Это сообщение отредактировал(а) Данкинг - 13.5.2010, 14:18 -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
![]()
|
| Правила форума "C++: Базы данных" | |
|
|
Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах. Благодарим за понимание. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Базы данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |