Модератор: Модераторы
в понедельник если интересно смогу дать эти функции...
function convert_cyr_string(str : string; from, to_ : char) : string;
var
i : integer;
p : integer;
c : char;
fromstr : string;
tostr : string;
begin
case from of
'w' : fromstr := 'абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
'd' : fromstr := #160#161#162#163#164#165#241#166#167#168#169#170#171#172#173#174#175#224#225#226#227#228#229#230#231#232#233#234#235#236#237#238#239#128#129#130#131#132#133#240#134#135#136#137#138#139#140#141#142#143#144#145#146#147#148#149#150#151#152#153#154#155#156#157#158#159;
'k' : fromstr := 'БВЧЗДЕJЦЪЙКЛМНОПРТУФХЖИГЮЫЭЯЩШЬАСбвчздеjцъйклмнопртуфхжигюыэящшьас';
else
fromstr := 'абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
end;
case to_ of
'w' : tostr := 'абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
'd' : tostr := #160#161#162#163#164#165#241#166#167#168#169#170#171#172#173#174#175#224#225#226#227#228#229#230#231#232#233#234#235#236#237#238#239#128#129#130#131#132#133#240#134#135#136#137#138#139#140#141#142#143#144#145#146#147#148#149#150#151#152#153#154#155#156#157#158#159;
'k' : tostr := 'БВЧЗДЕJЦЪЙКЛМНОПРТУФХЖИГЮЫЭЯЩШЬАСбвчздеjцъйклмнопртуфхжигюыэящшьас';
else
tostr := 'абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
end;
for i := 1 to length(str) do
begin
c := str[i];
p := pos(c, fromstr);
if p <> 0 then
begin
c := tostr[p];
str[i] := c;
end;
str[i] := c;
end;
convert_cyr_string := str;
end;
3 dBase III+
4 dBase IV
7 Visual dBase VII
25 FoxPro
function TDbf.GetFieldData(Field: TField; Buffer: Pointer; NativeFormat: Boolean): Boolean; {overload; override;}
begin
// pretend nativeformat is true
Result := inherited GetFieldData(Field, Buffer, True);
if (Field.DataType = ftString)and(Buffer<>nil) then
OemToCharBuff(Buffer, Buffer, Field.DataSize);
end;
procedure TDbf.SetFieldData(Field: TField; Buffer: Pointer; NativeFormat: Boolean); {overload; override;}
var buf: array[0..1024]of char;
begin
if (Field.DataType = ftString)and(Buffer<>nil) then
begin
CharToOemBuff(Buffer, Buf, Field.DataSize);
Buffer:=@buf
end;
// pretend nativeformat is true
inherited SetFieldData(Field, Buffer, True);
end;
А может как-то с UTF-8 можно завязаться? Ну, чтобы потом не мучиться.
Что касается стандартов, то если в заголовке DBF по смещению 29 не указана кодировка, то подразумевается OEM, в противном случае указанная (например cp1251).
Две простые строки
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 27