CP866 в ANSI
Модератор: Модераторы
-
Джентельмен
- постоялец
- Сообщения: 162
- Зарегистрирован: 16.10.2005 10:47:26
- Откуда: Украина Донбасс Краматорск
- Контактная информация:
CP866 в ANSI
Есть беда... есть база... парадоксовская... но не суть важно... как мне строку в кодировке cp866 преобразовать в ANSI. Может кто писал уже такие функции... поделитесь опытом...
Если достаточно win1251, то можно так:
Код: Выделить всё
function dos2win(lpStr:String):string;
var
i,tekasci,newasci : Integer;
newstr : String;
begin
newstr:='';
for i:=1 to length(lpstr) do begin
tekasci:=ord(lpStr[i]);
if tekasci>127 then begin
if tekasci<176 then newasci:=tekasci + 64 else begin
case tekasci of
184: newasci:=241;
168: newasci:=240;
else newasci:=tekasci + 16;
end;
end;
end else begin
newasci:=tekasci;
end;
newstr:=newstr+chr(newasci);
end;
dos2win:=newstr;
end;Если Вы просто смотрите содержимое таблицы в DBGrid, то перекодировку можно сделать средствами самой DBGrid:
Код: Выделить всё
DBGrid.Font.CharSet:=OEM_CHARSET;
-
Джентельмен
- постоялец
- Сообщения: 162
- Зарегистрирован: 16.10.2005 10:47:26
- Откуда: Украина Донбасс Краматорск
- Контактная информация:
а нет... все выше перечисленные предложения работают, но не в моей ситуации... у меня беда в том что DBGrid не коректно отображает текст... насколько я понимаю должно быть так:
OEM: Êðàìàòîðñê
ANSI: Краматорск
а у меня: aAuEAAAi#a - ниначто не похоже...
и функции вышепредложенные не работают...
еще варианты?
OEM: Êðàìàòîðñê
ANSI: Краматорск
а у меня: aAuEAAAi#a - ниначто не похоже...
и функции вышепредложенные не работают...
еще варианты?
Джентельмен
Значит Вы неправильно описали свою проблему. Если в парадоксовской таблице кодировка ср866 то у Вас должно быть так:
ANSI: Êðàìàòîðñê (или нечто подобное невообразимо тараканье)
OEM: Краматорск.
Но вот судя по этому у Вас перекодировка идёт в еще одну неправильную кодировку.
Вопрос: каким образом Вы определили, что в Ваших таблицах именно cp866?
Значит Вы неправильно описали свою проблему. Если в парадоксовской таблице кодировка ср866 то у Вас должно быть так:
ANSI: Êðàìàòîðñê (или нечто подобное невообразимо тараканье)
OEM: Краматорск.
Но вот судя по этому у Вас перекодировка идёт в еще одну неправильную кодировку.
Вопрос: каким образом Вы определили, что в Ваших таблицах именно cp866?
-
Джентельмен
- постоялец
- Сообщения: 162
- Зарегистрирован: 16.10.2005 10:47:26
- Откуда: Украина Донбасс Краматорск
- Контактная информация:
-
Джентельмен
- постоялец
- Сообщения: 162
- Зарегистрирован: 16.10.2005 10:47:26
- Откуда: Украина Донбасс Краматорск
- Контактная информация:
Vadim писал(а):Джентельмен
Значит Вы неправильно описали свою проблему. Если в парадоксовской таблице кодировка ср866 то у Вас должно быть так:
ANSI: Êðàìàòîðñê (или нечто подобное невообразимо тараканье)
OEM: Краматорск.
Но вот судя по этому у Вас перекодировка идёт в еще одну неправильную кодировку.
Вопрос: каким образом Вы определили, что в Ваших таблицах именно cp866?
в этом меня убедил сам разработчик базы... может вы поможите разобратса?
- alexs
- долгожитель
- Сообщения: 4067
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Джентельмен
Вот код из Rx
не забудь подключить windows
кстати, а каким образом получаете доступ к paradox таблицам?
Вот код из Rx
Код: Выделить всё
function OemToAnsiStr(const OemStr: string): string;
begin
SetLength(Result, Length(OemStr));
if Length(Result) > 0 then
{$IFDEF WIN32}
OemToCharBuff(PChar(OemStr), PChar(Result), Length(Result));
{$ELSE}
// OemToAnsiBuff(@OemStr[1], @Result[1], Length(Result));
{$ENDIF}
end;
не забудь подключить windows
кстати, а каким образом получаете доступ к paradox таблицам?
-
Джентельмен
- постоялец
- Сообщения: 162
- Зарегистрирован: 16.10.2005 10:47:26
- Откуда: Украина Донбасс Краматорск
- Контактная информация:
-
Джентельмен
- постоялец
- Сообщения: 162
- Зарегистрирован: 16.10.2005 10:47:26
- Откуда: Украина Донбасс Краматорск
- Контактная информация:
alexs писал(а):Джентельмен
Вот код из RxКод: Выделить всё
function OemToAnsiStr(const OemStr: string): string;
begin
SetLength(Result, Length(OemStr));
if Length(Result) > 0 then
{$IFDEF WIN32}
OemToCharBuff(PChar(OemStr), PChar(Result), Length(Result));
{$ELSE}
// OemToAnsiBuff(@OemStr[1], @Result[1], Length(Result));
{$ENDIF}
end;
не забудь подключить windows
кстати, а каким образом получаете доступ к paradox таблицам?
TDbf - с екселем открыл в dbf сохранил... может тут что-то не так я делаю... ну просто подругому как пока не знаю...
-
Джентельмен
- постоялец
- Сообщения: 162
- Зарегистрирован: 16.10.2005 10:47:26
- Откуда: Украина Донбасс Краматорск
- Контактная информация:
