Для начала объявим константу, состоящую из массива, которая необходима для нашей работы:
const UTF8: array[0..65, 0..1] of string=
((Char($EF)+Char($BB)+Char($BF), ''),
(Char($D0)+Char($82), Char($80)),
(Char($D0)+Char($83), Char($81)),
(Char($E2)+Char($80)+Char($9A), Char($82)),
(Char($D1)+Char($93), Char($83)),
(Char($E2)+Char($80)+Char($9E), Char($84)),
(Char($E2)+Char($80)+Char($A6), Char($85)),
(Char($E2)+Char($80)+Char($A0), Char($86)),
(Char($E2)+Char($80)+Char($A1), Char($87)),
(Char($E2)+Char($82)+Char($AC), Char($88)),
(Char($E2)+Char($80)+Char($B0), Char($89)),
(Char($D0)+Char($89), Char($8A)),
(Char($E2)+Char($80)+Char($B9), Char($8B)),
(Char($D0)+Char($8A), Char($8C)),
(Char($D0)+Char($8C), Char($8D)),
(Char($D0)+Char($8B), Char($8E)),
(Char($D0)+Char($8F), Char($8F)),
(Char($D1)+Char($92), Char($90)),
(Char($E2)+Char($80)+Char($98), Char($91)),
(Char($E2)+Char($80)+Char($99), Char($92)),
(Char($E2)+Char($80)+Char($9C), Char($93)),
(Char($E2)+Char($80)+Char($9D), Char($94)),
(Char($E2)+Char($80)+Char($A2), Char($95)),
(Char($E2)+Char($80)+Char($93), Char($96)),
(Char($E2)+Char($88)+Char($92), Char($96)),
(Char($E2)+Char($80)+Char($94), Char($97)),
(Char($C2)+Char($98), Char($98)),
(Char($E2)+Char($84)+Char($A2), Char($99)),
(Char($D1)+Char($99), Char($9A)),
(Char($E2)+Char($80)+Char($BA), Char($9B)),
(Char($D1)+Char($9A), Char($9C)),
(Char($D1)+Char($9C), Char($9D)),
(Char($D1)+Char($9B), Char($9E)),
(Char($D1)+Char($9F), Char($9F)),
(Char($C2)+Char($A0), Char($A0)),
(Char($D0)+Char($8E), Char($A1)),
(Char($D1)+Char($9E), Char($A2)),
(Char($D0)+Char($88), Char($A3)),
(Char($C2)+Char($A4), Char($A4)),
(Char($D2)+Char($90), Char($A5)),
(Char($C2)+Char($A6), Char($A6)),
(Char($C2)+Char($A7), Char($A7)),
(Char($D0)+Char($81), Char($A8)),
(Char($C2)+Char($A9), Char($A9)),
(Char($D0)+Char($84), Char($AA)),
(Char($C2)+Char($AB), Char($AB)),
(Char($C2)+Char($AC), Char($AC)),
(Char($C2)+Char($AD), Char($AD)),
(Char($C2)+Char($AE), Char($AE)),
(Char($D0)+Char($87), Char($AF)),
(Char($C2)+Char($B0), Char($B0)),
(Char($C2)+Char($B1), Char($B1)),
(Char($D0)+Char($86), Char($B2)),
(Char($D1)+Char($96), Char($B3)),
(Char($D2)+Char($91), Char($B4)),
(Char($C2)+Char($B5), Char($B5)),
(Char($C2)+Char($B6), Char($B6)),
(Char($C2)+Char($B7), Char($B7)),
(Char($D1)+Char($91), Char($B8)),
(Char($E2)+Char($84)+Char($96), Char($B9)),
(Char($D1)+Char($94), Char($BA)),
(Char($C2)+Char($BB), Char($BB)),
(Char($D1)+Char($98), Char($BC)),
(Char($D0)+Char($85), Char($BD)),
(Char($D1)+Char($95), Char($BE)),
(Char($D1)+Char($97), Char($BF)));
1. Перевод текста из кодировки ANSI в UTF8
function ANSIToUTF8(s: string): string;
label le;
var i, l: integer;
begin
For l:=Length(s) downto 1 do
begin
For i:=Low(UTF8) to High(UTF8) do
If s[l]=UTF8[i, 1] then
begin
Delete(s, l, 1);
Insert(UTF8[i, 0], s, l);
goto le;
end;
For i:=$90 to $BF do
If s[l]=Char(i+$30) then
begin
Delete(s, l, 1);
Insert(Char($D0)+Char(i), s, l);
goto le;
end;
For i:=$80 to $8F do
If s[l]=Char(i+$70) then
begin
Delete(s, l, 1);
Insert(Char($D1)+Char(i), s, l);
goto le;
end;
le:
end;
Result:=s;
end;
где
s - исходная строка.
2. Перевод текста из кодировки UTF8 в ANSI
function UTF8ToANSI(s: string): string;
var i: integer;
begin
For i:=Low(UTF8) to High(UTF8) do
s:=SimwolZamenit(s, UTF8[i, 0], UTF8[i, 1], true, true);
For i:=$90 to $BF do
s:=SimwolZamenit(s, Char($D0)+Char(i), Char(i+$30), true, true);
For i:=$80 to $8F do
s:=SimwolZamenit(s, Char($D1)+Char(i), Char(i+$70), true, true);
s:=SimwolZamenit(s, '−', '-', true, true);
s:=SimwolZamenit(s, '°', '°', true, true);
s:=SimwolZamenit(s, '…', '...', true, true);
s:=SimwolZamenit(s, ' ', #160, true, true);
s:=SimwolZamenit(s, ' ', #160, true, true);
s:=SimwolZamenit(s, #226#128#137, ' ', true, true);
Result:=s;
end;
где
s - исходная строка.
Примечание. Для полноценной работы данной функции необходимо скопировать функцию "Замена символа или фразы на новое значение":
function SimwolZamenit(s, simwol_star, simwol_now: string; Registr_star, Registr_now: boolean): string;
|