Неверов Евгений Викторович
Меню сайта
Категории раздела
Программирование на языке Паскаль [27]
В данной категории представлены новые функции, созданные на языке Паскаль, которые могут пригодиться при написании своих программ
Программирование на Delphi [18]
В данной категории представлены полезные подпрограммы, которые могут пригодиться при написании своих программ, а также рассматриваются примеры готовых проектов, создаваемых в среде программирования Delphi
Программирование на HTML [0]
В данной категории рассматриваются примеры готовых проектов, создаваемых на языке HTML
Прочее [0]
Свободная тематика
Мини-чат
200
Наш опрос
Чем Вы занимаетесь?
Всего ответов: 36
Статистика

Рейтинг@Mail.ru
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » Статьи » Программирование на языке Паскаль [ Добавить статью ]

Перевод текста из одной кодировки в другую

Для начала объявим константу, состоящую из массива, которая необходима для нашей работы:


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;
Категория: Программирование на языке Паскаль | Добавил: newerow1989 (12.03.2016 11:17 )
Просмотров: 158 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Все смайлы
Код *:
Поиск
Друзья сайта
  • Создать сайт
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Все проекты компании
  • Copyright MyCorp © 2018
    Автор этого сайта: Неверов Евгений Викторович

    Мои координаты
    Бесплатный конструктор сайтов - uCozЯндекс.Метрика