Форум: "Базы";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];
ВнизПроблема с кодировками (BDE) Найти похожие ветки
← →
YuN (2003-05-28 15:59) [0]Имеются dbf с полями в досовской кодировке. Если они созданы без явного указания кодировке в заголовке файла (по смещению 1Dh - 0), то программы, работающие через BDE, кушают их на ура (в реестре и конфиге прописано, что драйвер для DBF соотв. 866 кодовой странице). Но если в заголовке тип кодировки прописан явно - имеем вместо текста крякозябры. Как бороться? Открыть файл как бинарный и вручную обнулить байт по 1Dh я, конечно, могу, но это неизящно :(
← →
Stas (2003-05-28 16:10) [1]Вот код:
aDBHnd - TDatabase.Handle;
aTblType - "PARADOX"/"DBASE"/"FOXPRO"
aLangDriver - "ancyrr".
procedure ChangeLangDriver( aDBHnd: HDBIDB; aTable: TTable; const aTblType, aLangDriver: String);
var
TblExt: string;
TblDesc: CRTblDesc;
OptDesc: FLDDesc;
OptData: array [0..250] of Char;
Cur: hDBICur;
Rec: CFGDesc;
begin
FillChar( OptDesc, SizeOf( OptDesc ), #0);
FillChar( TblDesc, SizeOf( TblDesc ), #0);
StrCopy( OptDesc.szName, "LANGDRIVER");
OptDesc.iLen := Length(aLangDriver) + 1;
with TblDesc do
begin
StrPCopy( szTblName, aTable.TableName);
StrCopy( szTblType, PChar(aTblType));
iOptParams := 1;
pfldOptParams := @OptDesc;
pOptData := @OptData;
end;
StrPCopy( OptData, aLangDriver);
Check( DbiDoRestructure( aDBHnd, 1, @TblDesc, nil, nil, nil, False ) );
end
← →
Reindeer Moss Eater (2003-05-28 16:37) [2]Перелопатить всю таблицу - это конечно изящнее, чем изменить один байт.
← →
Mike Kouzmine (2003-05-28 16:46) [3]Солиднее
← →
Reindeer Moss Eater (2003-05-28 16:58) [4]Остается проверить, "верит" ли BDE заголовку Dbase"а при выполнении DbiDoRestructure.
Проблема в том, что данные и так уже в cp866.
← →
Anatoly Podgoretsky (2003-05-28 17:03) [5]Зпаголовку верит, данным нет
← →
Reindeer Moss Eater (2003-05-28 17:11) [6]Тогда боюсь, что к данным в таблице (а они в cp866) будет применена операция ANSI -> OEM.
← →
Reindeer Moss Eater (2003-05-28 17:12) [7]Изящество получится очень изящное
← →
YuN (2003-05-29 08:07) [8]М-да... Т.е. получается, что это - глюк в чистом виде? Я думал, нужно просто задать правильное значение какого-нибудь property. А с глюком, действительно, не зазорно бороться "хакерскими" методами.
← →
Reindeer Moss Eater (2003-05-29 09:06) [9]Это глюк несомненно, но это глюк не BDE.
Такие файлы формирует, например, всем известная 1С. Данные в cp866, а в заголовке указано, что в ANSI.
← →
YuN (2003-05-30 08:46) [10]Нет, в моем случае файлы экспортированы из Visual FoxPro, и вроде как в заголовке все указано правильно (по крайней мере, сам FoxPro их отображает корректно). Соотв. байт в заголовке - 65h (не знаю, действительно ли он означает 866 страницу). Досовский dbviewer их смотреть отказывается, что происходит с BDEшными прогами, рассказал. Обнуление байта решает все проблемы.
← →
Reindeer Moss Eater (2003-05-30 09:00) [11]Он как раз означает ANSI
← →
Anatoly Podgoretsky (2003-05-30 09:24) [12]YuN (30.05.03 08:46)
65h это cp-866
← →
autootvetchik (2003-05-30 14:16) [13]Никогда не было проблемм. Ставишь для драйвера FOXPRO LangDriver "dBASE RUS cp866" (лучше динамически) и все! А какая там в таблице прописана CP по-барабану... (D5-D7, BDE 5.01)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.031 c