Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Перекодировка текста DOS-Windows-Koi8

Delphi , Синтаксис , Кодировки

Перекодировка текста DOS-Windows-Koi8


Подходит компьютерщик (К) к газетному киоску и спрашивает у продавца (П):
К: - Есть ли у вас свежий номер 'Компьютерного обозрения'?
П: - Есть.
К: - Ну тогда, пожалуйста, один номер в кодировке KOI8-R


procedure WinToDos;
var
  Src, Str: PChar;
begin
  Src := Memo1.Lines.GetText; //Берем текст из TMemo как тип PChar
  CharToOem(Src, Str); //API функция для перевода текста
  Memo2.Lines.Text := StrPas(Str);//Записываем назад
end;

procedure DosToWin;
var
  Src, Str: PChar;
begin
  Src := Memo1.Lines.GetText; //Берем текст из TMemo как тип PChar
  OemToChar(Src, Str); //API функция для перевода текста
  Memo2.Lines.Text := StrPas(Str);//Записываем назад
end;

var
  koi8toalt : array [0..127] of char = (
  CHR($c4), Chr($b3), Chr($da), Chr($bf),
  Chr($c0), Chr($d9), Chr($c3), Chr($b4),
  Chr($c2), Chr($c1), Chr($c5), Chr($df),
  Chr($dc), Chr($db), Chr($dd), Chr($de),
  Chr($b0), Chr($b1), Chr($b2), Chr($f4),
  Chr($fe), Chr($f9), Chr($fb), Chr($f7),
  Chr($f3), Chr($f2), Chr($ff), Chr($f5),
  Chr($f8), Chr($fd), Chr($fa), Chr($f6),
  Chr($cd), Chr($ba), Chr($d5), Chr($f1),
  Chr($d6), Chr($c9), Chr($b8), Chr($b7),
  Chr($bb), Chr($d4), Chr($d3), Chr($c8),
  Chr($be), Chr($bd), Chr($bc), Chr($c6),
  Chr($c7), Chr($cc), Chr($b5), Chr($f0),
  Chr($b6), Chr($b9), Chr($d1), Chr($d2),
  Chr($cb), Chr($cf), Chr($d0), Chr($ca),
  Chr($d8), Chr($d7), Chr($ce), Chr($fc),
  Chr($ee), Chr($a0), Chr($a1), Chr($e6),
  Chr($a4), Chr($a5), Chr($e4), Chr($a3),
  Chr($e5), Chr($a8), Chr($a9), Chr($aa),
  Chr($ab), Chr($ac), Chr($ad), Chr($ae),
  Chr($af), Chr($ef), Chr($e0), Chr($e1),
  Chr($e2), Chr($e3), Chr($a6), Chr($a2),
  Chr($ec), Chr($eb), Chr($a7), Chr($e8),
  Chr($ed), Chr($e9), Chr($e7), Chr($ea),
  Chr($9e), Chr($80), Chr($81), Chr($96),
  Chr($84), Chr($85), Chr($94), Chr($83),
  Chr($95), Chr($88), Chr($89), Chr($8a),
  Chr($8b), Chr($8c), Chr($8d), Chr($8e),
  Chr($8f), Chr($9f), Chr($90), Chr($91),
  Chr($92), Chr($93), Chr($86), Chr($82),
  Chr($9c), Chr($9b), Chr($87), Chr($98),
  Chr($9d), Chr($99), Chr($97), Chr($9a));

function Koi8toWin(const Data: PChar; DataLen: Integer): PChar;
var
  PCh: PChar;
  i: Integer;
begin
  PCh := Data;
  for i := 1 to DataLen do
  begin
    if Ord(Pch^) > 127 then
      Pch^ := koi8toalt[Ord(Pch^) - 128];
    Inc(PCh);
  end;
  PCh := Data;
  OemToCharBuff(PCh, PCh, DWORD(DataLen));
  Result := Data;
end;

Переведенный текст:

Распространенная программа на языке Delphi для преобразования текста между кодировками DOS и Windows, конкретно из KOI8-R в Windows-1251.

Описание кода:

Процедура WinToDos

  • Принимает текст из TMemo (графического компонента, используемого в Delphi) и конвертирует его из Windows-1251 в KOI8-R с помощью функции API CharToOem.
  • Конвертированный текст затем записывается обратно в другой TMemo.

Процедура DosToWin

  • Аналогична WinToDos, эта процедура принимает текст из TMemo, конвертирует его из KOI8-R в Windows-1251 с помощью функции API OemToChar и записывает результат обратно в другой TMemo.

Функция Koi8toWin

  • Принимает PChar (указатель на строку ANSI) и ее длину как входные параметры.
  • Итерирует по каждому символу в строке ввода. Если ординальное значение символа превышает 127, оно заменяется соответствующим символом KOI8-R из массива koi8toalt.
  • После замены всех символов использует функцию API OemToCharBuff для преобразования модифицированной строки из KOI8-R в Windows-1251.
  • Результат - PChar, содержащий конвертированный текст.

Написанный код кажется корректным и должен работать как ожидается для преобразования текста между кодировками DOS и Windows. Однако, пожалуйста, отметьте, что это решение специфично для языка Delphi и может не быть напрямую применимым в других языках или контекстах.

Некоторые предложения по улучшению:

  • Вместо использования указателей PCharconsider использовать более современные и безопасные типы строк, такие как String или UnicodeString.
  • Добавьте механизмы обработки ошибок для справления с потенциальными проблемами при процессе преобразования.
  • Рассмотрите добавление дополнительных комментариев и объяснений в коде для упрощения его понимания для других.

В целом, этоsolid solution, которая должна работать хорошо в приложениях на основе Delphi.

Перекодировка текста из кодировки DOS в кодировку Windows-KOI8 и обратно.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Кодировки ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:46:11/0.0057239532470703/1