На просторах Интернета страницы сайтов имеют текстовую кодировку
'UTF-8', однако язык Паскаль понимает кодировку
'ANSI'. При открытии таких страниц (либо файлов с
кодировкой 'UTF-8') мы можем столкнуться с
бессмысленным набором символов:
Поэтому, для перевода текста из одной кодировки в другую, необходимо использовать
следующие функции: AnsiToUtf8 , Utf8Encode ,
Utf8ToAnsi и Utf8Decode , позволяющие преобразовывать
строки из одной кодировки в другую.
1. Перевод текста из кодировки ANSI в UTF-8
function AnsiToUtf8(const S: string): UTF8String;
function Utf8Encode(const WS: WideString): UTF8String;
где:
S , WS – исходная строка в кодировке ANSI.
2. Перевод текста из кодировки UTF-8 в ANSI
function Utf8ToAnsi(const S: UTF8String): string;
function Utf8Decode(const S: UTF8String): WideString;
где:
S – исходная строка в кодировке UTF-8.
3. Перевод HTML-страницы со спецсимволами
К спецсимволам относятся некоторые символы, такие как
'&' (&, амперсанд),
'<' (<, меньше),
'>' (>, больше),
'–' (–, короткое тире),
'−' (−, минус),
'—' (—, длинное тире),
'°' (°, градус),
'§' (§, параграф),
'…' (…, многоточие),
' ' ( , неразрывный пробел) и др.
Естественно, при преобразования строк с такими спецсимволами сами спецсимволы
останутся закодированными, например, 'Температура
−25 °C.'. Поэтому нужна функция Utf8ToAnsiSym .
function Utf8ToAnsiSym(s: string): string;
begin
s:=Utf8ToAnsi(s);
s:=StringReplaceNew(s, '&', '&', false, false);
s:=StringReplaceNew(s, '<', '<', false, false);
s:=StringReplaceNew(s, '>', '>', false, false);
s:=StringReplaceNew(s, '–', #150, false, false);
s:=StringReplaceNew(s, '−', '-', false, false);
s:=StringReplaceNew(s, '—', #151, false, false);
s:=StringReplaceNew(s, '°', #176, false, false);
s:=StringReplaceNew(s, '§', #167, false, false);
s:=StringReplaceNew(s, '…', #133, false, false);
s:=StringReplaceNew(s, ' ', #160, false, false);
{ можно добавить и другие спецсимволы }
Result:=s;
end;
где:
s – исходная строка в кодировке UTF-8.
Примечание. Для полноценной работы данной функции
необходимо скопировать вспомогательную функцию "Замена
символа или фразы на новое значение":
function StringReplaceNew(s, OldPattern, NewPattern: string; RegOld, RegNew: boolean): string;
|