Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.26;
Скачать: CL | DM;

Вниз

Проблема с кодировками (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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.034 c
1-84251
Step[B.M.]
2003-06-13 13:01
2003.06.26
---|Ветка была без названия|---


1-84348
FRT
2003-06-16 11:42
2003.06.26
Объединение ячеек в StringGrid


1-84256
LamuS
2003-06-08 22:12
2003.06.26
Младшая цифра


3-83921
Крот
2003-05-29 12:44
2003.06.26
Операция побитового AND в SQL


9-83845
K.o.Z
2003-01-11 23:41
2003.06.26
Вопрос по теме: Ландшафт