Подскажите пож. такую функцию...
Задача выглядит следующим образом. В БД Firebird данные лежат в 1251. С ней надо работать в Лазаре в Линуксе.
Решил попробовать GTK2, перекодируя перед выводом данные в utf8.
Модератор: Модераторы
tria писал(а):Подскажите пож. такую функцию...
Задача выглядит следующим образом. В БД Firebird данные лежат в 1251. С ней надо работать в Лазаре в Линуксе.
Решил попробовать GTK2, перекодируя перед выводом данные в utf8.
haword писал(а):посмотри в нутри файла lconv.pas в LCL
//Stupid code. Works anyway, but extra-slow
{$ifdef Unix}
SL:=TStringList.Create;
SL.Text:=s;
FN1:=GetTempFileName;
SL.SaveToFile(FN1);
FN2:=GetTempFileName;
Shell('iconv -f '+from+' -t '+toC+'<'+FN1+' >'+FN2);
SL.LoadFromFile(FN2);
if SL.Text<>'' then Result:=SL.Text else Result:=s;
DeleteFile(FN1);DeleteFile(FN2);
{$endif}
Джентельмен писал(а):ага... и вы столкнулись с проблемой... а я когда то поднимал эту тему... пол инета перелопатил... кучу функций перепробывал... ну да ладно... если не забуду, завтра принесу и сброшу функцию кодирования... как раз для ваших целей... и решит вашу проблему... хотя... а нифига с собой нет... если не забуду завтра выложу...
unit Unit8;
{$mode objfpc}{$H+}
interface
const
BASE_CHAR = 192;
w2k : array[0..63] of Byte = (225, 226, 247, 231, 228, 229, 246, 250,
233, 234, 235, 236, 237, 238, 239, 240,
242, 243, 244, 245, 230, 232, 227, 254,
251, 253, 255, 249, 248, 252, 224, 241,
193, 194, 215, 199, 196, 197, 214, 218,
201, 202, 203, 204, 205, 206, 207, 208,
210, 211, 212, 213, 198, 200, 195, 222,
219, 221, 223, 217, 216, 220, 192, 209);
k2w : array[0..63] of Byte = (254, 224, 225, 246, 228, 229, 244, 227,
245, 232, 233, 234, 235, 236, 237, 238,
239, 255, 240, 241, 242, 243, 230, 226,
252, 251, 231, 248, 253, 249, 247, 250,
222, 192, 193, 214, 196, 197, 212, 195,
213, 200, 201, 202, 203, 204, 205, 206,
207, 223, 208, 209, 210, 211, 198, 194,
220, 219, 199, 216, 221, 217, 215, 218);
OTA = #$01#$02#$03#$04#$05#$06#$07#$08#$09#$0A#$0B#$0C#$0D#$0E#$0F#$10+
#$11#$12#$13#$14#$15#$16#$17#$18#$19#$1A#$1B#$1C#$1D#$1E#$1F#$20+
#$21#$22#$23#$24#$25#$26#$27#$28#$29#$2A#$2B#$2C#$2D#$2E#$2F#$30+
#$31#$32#$33#$34#$35#$36#$37#$38#$39#$3A#$3B#$3C#$3D#$3E#$3F#$40+
#$41#$42#$43#$44#$45#$46#$47#$48#$49#$4A#$4B#$4C#$4D#$4E#$4F#$50+
#$51#$52#$53#$54#$55#$56#$57#$58#$59#$5A#$5B#$5C#$5D#$5E#$5F#$60+
#$61#$62#$63#$64#$65#$66#$67#$68#$69#$6A#$6B#$6C#$6D#$6E#$6F#$70+
#$71#$72#$73#$74#$75#$76#$77#$78#$79#$7A#$7B#$7C#$7D#$7E#$7F#$C0+
#$C1#$C2#$C3#$C4#$C5#$C6#$C7#$C8#$C9#$CA#$CB#$CC#$CD#$CE#$CF#$D0+
#$D1#$D2#$D3#$D4#$D5#$D6#$D7#$D8#$D9#$DA#$DB#$DC#$DD#$DE#$DF#$E0+
#$E1#$E2#$E3#$E4#$E5#$E6#$E7#$E8#$E9#$EA#$EB#$EC#$ED#$EE#$EF+
#$80#$81#$82+
#124#124#124#124#43#43#124#124#43#43#43#43#43#43+
#43#43#124#45#43#124#124#43#43#43#43#124#45#43#43#43+
#43#43#43#43#43#43#43#43#43#43+
#$9B#$9C#$A6#$CC#$9D+
#$F0+
#$F1#$F2#$F3#$F4#$F5#$F6#$F7#$F8#$F9#$FA#$FB#$FC#$FD#$FE#$FF#$A8+
#$B8#$F7#$BE#$B6#$A7#$9F#$B8#$B0#$A8#$B7#$B9#$B3#$B2#$9E#$A0;
ATO = #$01#$02#$03#$04#$05#$06#$07#$08#$09#$0A#$0B#$0C#$0D#$0E#$0F#$10+
#$11#$12#$13#$14#$15#$16#$17#$18#$19#$1A#$1B#$1C#$1D#$1E#$1F#$20+
#$21#$22#$23#$24#$25#$26#$27#$28#$29#$2A#$2B#$2C#$2D#$2E#$2F#$30+
#$31#$32#$33#$34#$35#$36#$37#$38#$39#$3A#$3B#$3C#$3D#$3E#$3F#$40+
#$41#$42#$43#$44#$45#$46#$47#$48#$49#$4A#$4B#$4C#$4D#$4E#$4F#$50+
#$51#$52#$53#$54#$55#$56#$57#$58#$59#$5A#$5B#$5C#$5D#$5E#$5F#$60+
#$61#$62#$63#$64#$65#$66#$67#$68#$69#$6A#$6B#$6C#$6D#$6E#$6F#$70+
#$71#$72#$73#$74#$75#$76#$77#$78#$79#$7A#$7B#$7C#$7D#$7E#$7F#$B0+
#$B1#$B2#$B3#$B4#$B5#$B6#$B7#$B8#$B9#$BA#$BB#$BC#$BD#$BE#$BF#$C0+
#$C1#$C2#$C3#$C4#$C5#$C6#$C7#$C8#$C9#$CA#$CB#$CC#$CD#$CE#$CF#$D0+
#$D1#$D2#$D3#$D4#$D5#$D6#$D7#$F0#$D9#$DA#$DB#$DC#$DD#$DE#$DF#$F0+
#$F1#$F2#$F3#$F4#$F5#$F6#$F7#$F1#$F9#$FA#$FB#$FC#$FD#$FE#$FF#$80+
#$81#$82#$83#$84#$85#$86#$87#$88#$89#$8A#$8B#$8C#$8D#$8E#$8F#$90+
#$91#$92#$93#$94#$95#$96#$97#$98#$99#$9A#$9B#$9C#$9D#$9E#$9F#$A0+
#$A1#$A2#$A3#$A4#$A5#$A6#$A7#$A8#$A9#$AA#$AB#$AC#$AD#$AE#$AF#$E0+
#$E1#$E2#$E3#$E4#$E5#$E6#$E7#$E8#$E9#$EA#$EB#$EC#$ED#$EE#$EF;
function WinToK8R(const Text : String) : String;
function K8RToWin(const Text : String) : String;
function _ATO(SS: string): string; {Win1251 - DOS866}
function _OTA(SS: string): string; {DOS866 - Win1251}
implementation
Uses
Unit1, Unit2, Unit3, Unit4, Unit5, Unit6, Unit7, Unit9, Unit10;
function WinToK8R(const Text : String) : String;
var
i : Integer;
begin
Result := Text;
for i := 1 to Length(Result) do
if Result[i] >= Char(BASE_CHAR) then
Result[i] := Char(w2k[Byte(Result[i])-BASE_CHAR]);
end;
function K8RToWin(const Text : String) : String;
var
i : Integer;
begin
Result := Text;
for i := 1 to Length(Result) do
if Result[i] >= Char(BASE_CHAR) then
Result[i] := Char(k2w[Byte(Result[i])-BASE_CHAR]);
end;
function _ATO(SS: string): string;
var I: integer;
SR: string;
begin
SR:='';
for I:=1 to Length(SS) do
SR:=SR+ATO[Ord(SS[I])];
Result:=SR;
end;
function _OTA(SS: string): string;
var I: integer;
SR: string;
begin
SR:='';
for I:=1 to Length(SS) do
SR:=SR+OTA[Ord(SS[I])];
Result:=SR;
end;
end.
function WinToK8R(const Text : String) : String; //1251->KOI8
function K8RToWin(const Text : String) : String; //KOI8->1251
function _ATO(SS: string): string; {Win1251 - DOS866}
function _OTA(SS: string): string; {DOS866 - Win1251}
Attid писал(а):посмотри как используется iconv тут
function iconv_open(__tocode:pchar; __fromcode:pchar):iconv_t;cdecl;external libiconvname name 'iconv_open';
function iconv(__cd:iconv_t; __inbuf:ppchar; __inbytesleft:psize_t; __outbuf:ppchar; __outbytesleft:psize_t):size_t;cdecl;external libiconvname name 'iconv';
function iconv_close(__cd:iconv_t):cint;cdecl;external libiconvname name 'iconv_close';
Attid писал(а):или посмотри что с перекодировкой есть тут
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7