Модератор: Модераторы
Function Bj_UTF8ToWin1251(s: String): String;
var
i: Integer;
Skip: Boolean;
Begin
Result := '';
For i := 0 To Length(s) Do
If Not(Skip) Then
Begin
Case s[i] Of
#1..#127: Result := Result + s[i];
#208:
Begin
Case s[i + 1] Of
#129: Result := Result + #168;
#144..#191: Result := Result + Chr(Ord(s[i + 1]) + 48);
End;
Skip := TRUE;
End;
#209:
Begin
Case s[i + 1] Of
#128..#143: Result := Result + Chr(Ord(s[i + 1]) + 112);
#145: Result := Result + #184;
End;
Skip := TRUE;
End;
End;
End
Else
Skip := FALSE;
End;
tria писал(а):Собственно, я писал такую ф-цию, где-то на форумах исходники есть - тут совместно ее дорабатывали.
Если не найдешь - могу выложить (туда и обратно)
function Tria_AnsiToUtf8(const s:string):string;
var i,n,j, Len:integer;
begin
SetLength(Result,Length(s)*3);
j:=1;
For i:=1 to Length(s) do begin
n:=ord(s[i]);
Case n of //One byte and russion symbols
1..127:
begin
Result[j]:=s[i];
Inc(j);
end;
128: begin Result[j]:=#208; Inc(j); Result[j]:=#130; Inc(j); end; //€
129: begin Result[j]:=#208; Inc(j); Result[j]:=#131; Inc(j); end; //
130: begin Result[j]:=#226; Inc(j); Result[j]:=#128; Inc(j); Result[j]:=#154; Inc(j); end; //‚
131: begin Result[j]:=#209; Inc(j); Result[j]:=#147; Inc(j); end; //ƒ
132: begin Result[j]:=#226; Inc(j); Result[j]:=#128; Inc(j); Result[j]:=#158; Inc(j); end; //„
133: begin Result[j]:=#226; Inc(j); Result[j]:=#128; Inc(j); Result[j]:=#166; Inc(j); end; //…
134: begin Result[j]:=#226; Inc(j); Result[j]:=#128; Inc(j); Result[j]:=#160; Inc(j); end; //†
135: begin Result[j]:=#226; Inc(j); Result[j]:=#128; Inc(j); Result[j]:=#161; Inc(j); end; //‡
136: begin Result[j]:=#226; Inc(j); Result[j]:=#130; Inc(j); Result[j]:=#172; Inc(j); end; //ˆ
137: begin Result[j]:=#226; Inc(j); Result[j]:=#128; Inc(j); Result[j]:=#176; Inc(j); end; //‰
138: begin Result[j]:=#208; Inc(j); Result[j]:=#137; Inc(j); end; //Š
139: begin Result[j]:=#226; Inc(j); Result[j]:=#128; Inc(j); Result[j]:=#185; Inc(j); end; //‹
140: begin Result[j]:=#208; Inc(j); Result[j]:=#138; Inc(j); end; //Œ
141: begin Result[j]:=#208; Inc(j); Result[j]:=#140; Inc(j); end; //
142: begin Result[j]:=#208; Inc(j); Result[j]:=#139; Inc(j); end; //Ž
143: begin Result[j]:=#208; Inc(j); Result[j]:=#143; Inc(j); end; //
144: begin Result[j]:=#209; Inc(j); Result[j]:=#146; Inc(j); end; //
145: begin Result[j]:=#226; Inc(j); Result[j]:=#128; Inc(j); Result[j]:=#152; Inc(j); end; //‘
146: begin Result[j]:=#226; Inc(j); Result[j]:=#128; Inc(j); Result[j]:=#153; Inc(j); end; //’
147: begin Result[j]:=#226; Inc(j); Result[j]:=#128; Inc(j); Result[j]:=#156; Inc(j); end; //“
148: begin Result[j]:=#226; Inc(j); Result[j]:=#128; Inc(j); Result[j]:=#157; Inc(j); end; //”
149: begin Result[j]:=#226; Inc(j); Result[j]:=#128; Inc(j); Result[j]:=#162; Inc(j); end; //•
150: begin Result[j]:=#226; Inc(j); Result[j]:=#128; Inc(j); Result[j]:=#147; Inc(j); end; //–
151: begin Result[j]:=#226; Inc(j); Result[j]:=#128; Inc(j); Result[j]:=#148; Inc(j); end; //—
152: begin Result[j]:=#194; Inc(j); Result[j]:=#152; Inc(j); end; //˜
153: begin Result[j]:=#226; Inc(j); Result[j]:=#132; Inc(j); Result[j]:=#162; Inc(j); end; //™
154: begin Result[j]:=#209; Inc(j); Result[j]:=#153; Inc(j); end; //š
155: begin Result[j]:=#226; Inc(j); Result[j]:=#128; Inc(j); Result[j]:=#186; Inc(j); end; //›
156: begin Result[j]:=#209; Inc(j); Result[j]:=#154; Inc(j); end; //œ
157: begin Result[j]:=#209; Inc(j); Result[j]:=#156; Inc(j); end; //
158: begin Result[j]:=#209; Inc(j); Result[j]:=#155; Inc(j); end; //ž
159: begin Result[j]:=#209; Inc(j); Result[j]:=#159; Inc(j); end; //Ÿ
160: begin Result[j]:=#194; Inc(j); Result[j]:=#160; Inc(j); end; //
161: begin Result[j]:=#208; Inc(j); Result[j]:=#142; Inc(j); end; //¡
162: begin Result[j]:=#209; Inc(j); Result[j]:=#158; Inc(j); end; //¢
163: begin Result[j]:=#208; Inc(j); Result[j]:=#136; Inc(j); end; //£
164: begin Result[j]:=#194; Inc(j); Result[j]:=#164; Inc(j); end; //¤
165: begin Result[j]:=#210; Inc(j); Result[j]:=#144; Inc(j); end; //¥
166: begin Result[j]:=#194; Inc(j); Result[j]:=#166; Inc(j); end; //¦
167: begin Result[j]:=#194; Inc(j); Result[j]:=#167; Inc(j); end; //§
168: begin Result[j]:=#208; Inc(j); Result[j]:=#129; Inc(j); end; //¨
169: begin Result[j]:=#194; Inc(j); Result[j]:=#169; Inc(j); end; //©
170: begin Result[j]:=#208; Inc(j); Result[j]:=#132; Inc(j); end; //ª
171: begin Result[j]:=#194; Inc(j); Result[j]:=#171; Inc(j); end; //«
172: begin Result[j]:=#194; Inc(j); Result[j]:=#172; Inc(j); end; //¬
173: begin Result[j]:=#194; Inc(j); Result[j]:=#173; Inc(j); end; //
174: begin Result[j]:=#194; Inc(j); Result[j]:=#174; Inc(j); end; //®
175: begin Result[j]:=#208; Inc(j); Result[j]:=#135; Inc(j); end; //¯
176: begin Result[j]:=#194; Inc(j); Result[j]:=#176; Inc(j); end; //°
177: begin Result[j]:=#194; Inc(j); Result[j]:=#177; Inc(j); end; //±
178: begin Result[j]:=#208; Inc(j); Result[j]:=#134; Inc(j); end; //²
179: begin Result[j]:=#209; Inc(j); Result[j]:=#150; Inc(j); end; //³
180: begin Result[j]:=#210; Inc(j); Result[j]:=#145; Inc(j); end; //´
181: begin Result[j]:=#194; Inc(j); Result[j]:=#181; Inc(j); end; //µ
182: begin Result[j]:=#194; Inc(j); Result[j]:=#182; Inc(j); end; //¶
183: begin Result[j]:=#194; Inc(j); Result[j]:=#183; Inc(j); end; //·
184: begin Result[j]:=#209; Inc(j); Result[j]:=#145; Inc(j); end; //¸
185: begin Result[j]:=#226; Inc(j); Result[j]:=#132; Inc(j); Result[j]:=#150; Inc(j); end; //¹
186: begin Result[j]:=#209; Inc(j); Result[j]:=#148; Inc(j); end; //º
187: begin Result[j]:=#194; Inc(j); Result[j]:=#187; Inc(j); end; //»
188: begin Result[j]:=#209; Inc(j); Result[j]:=#152; Inc(j); end; //¼
189: begin Result[j]:=#208; Inc(j); Result[j]:=#133; Inc(j); end; //½
190: begin Result[j]:=#209; Inc(j); Result[j]:=#149; Inc(j); end; //¾
191: begin Result[j]:=#209; Inc(j); Result[j]:=#151; Inc(j); end; //¿
192..239://'À'..'ï'
begin
Result[j]:=#208; Inc(j);
Result[j]:=Char(n-48); Inc(j);
end;
240..255://'ð'..'ÿ'
begin
Result[j]:=#209; Inc(j);
Result[j]:=Char(n-112); Inc(j);
end;
end;//Case
end;
SetLength(Result,j-1);
end;
function Tria_Utf8ToAnsi(const s:string):string;
var i,n,j, Len:integer;
begin
SetLength(Result,Length(s));
j:=1; i:=1;
While i<=Length(s) do begin
Case s[i] of
#1..#127://One byte and latin symbols
begin
Result[j]:=s[i];
end;
#194: begin
Inc(i);
Result[j]:=s[i];
end;
#208: begin
Inc(i); //n:=ord(s[i]);
Case s[i] of
#129: Result[j]:=#168; //¨
#130: Result[j]:=#128; //€
#131: Result[j]:=#129; //
#132: Result[j]:=#170; //ª
#133: Result[j]:=#189; //½
#134: Result[j]:=#178; //²
#135: Result[j]:=#175; //¯
#136: Result[j]:=#163; //£
#137: Result[j]:=#138; //Š
#138: Result[j]:=#140; //Œ
#139: Result[j]:=#142; //Ž
#140: Result[j]:=#141; //
#142: Result[j]:=#161; //¡
#143: Result[j]:=#143; //
#144..#191:begin
n:=ord(s[i]);
Result[j]:=Char(n+48);//'À'..'ï'
end;
end;
end;
#209: begin
Inc(i);
Case s[i] of
#128..#143:begin
n:=ord(s[i]);
Result[j]:=Char(n+112);//'ð'..'ÿ'
end;
#145: Result[j]:=#184; //¸
#146: Result[j]:=#144; //
#147: Result[j]:=#131; //ƒ
#148: Result[j]:=#186; //º
#149: Result[j]:=#190; //¾
#150: Result[j]:=#179; //³
#151: Result[j]:=#191; //¿
#152: Result[j]:=#188; //¼
#153: Result[j]:=#154; //š
#154: Result[j]:=#156; //œ
#155: Result[j]:=#158; //ž
#156: Result[j]:=#157; //
#158: Result[j]:=#162; //¢
#159: Result[j]:=#159; //Ÿ
end;
end;
#210: begin
Inc(i);
Case s[i] of
#144: Result[j]:=#165; //¥
#145: Result[j]:=#180; //´
end;
end;
#226: begin
Inc(i);
Case s[i] of
#128:begin
Inc(i);
Case s[i] of
#147: Result[j]:=#150; //–
#148: Result[j]:=#151; //—
#152: Result[j]:=#145; //‘
#153: Result[j]:=#146; //’
#154: Result[j]:=#130; //‚
#156: Result[j]:=#147; //“
#157: Result[j]:=#148; //”
#158: Result[j]:=#132; //„
#160: Result[j]:=#134; //†
#161: Result[j]:=#135; //‡
#162: Result[j]:=#149; //•
#166: Result[j]:=#133; //…
#176: Result[j]:=#137; //‰
#185: Result[j]:=#139; //‹
#186: Result[j]:=#155; //›
end;
end;
#130:begin
Inc(i);
Result[j]:=#136;//#172; //ˆ
end;
#132:begin
Inc(i);
Case s[i] of
#150: Result[j]:=#185; //¹
#162: Result[j]:=#153; //™
end;
end;
end;//Case
end;
end;
Inc(j); Inc(i);
end;//While
SetLength(Result,j-1);
end;
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 44