Для текстовых документов существуют две совершенно различные кодировки — Windows и MS DOS. Обычно приложения Windows используют, естественно, для текстов кодировку Windows. Но если какие-то файлы должны читаться, например, в Norton Commander или в других приложениях DOS, надо применять кодировку MS DOS. Применение этой кодировки требуется также при разработке консольных приложений Win32.
Для взаимного перевода текста в текст DOS и обратно в API Windows предусмотрены две процедуры: CharToOem — перевод в формат DOS, и OemToChar - перевод из формата DOS в «только текст». Они объявлены в модуле Windows. Для VCL Win32 объявления имеют вид:
function CharToOem(lpszSrc: PAnsiChar; lpszDst: PAnsiChar): BOOL;
function OemToChar(lpszSrc: PAnsiChar; lpszDst: PAnsiChar): BOOL;
function CharToOem(lpszSrc: string; lpszDst: StringBuilder): BOOL;
function OemToChar(lpszSrc: string; lpszDst: StringBuilder): BOOL;
Обе процедуры принимают два параметра типа PAnsiChar, первый из которых — указатель на строку переводимого текста, а второй — указатель на строку результата перевода.
Приведу сначала пример консольного приложения VCL Win32:
program Projectl;
{$APPTYPE CONSOLE}
uses
Windows;
var S: array[0..255] of char;
SI: string;
begin
CharToOem('Привет! Введите свое имя:1, S);
Writeln (S);
Readln(Sl);
OemToChar(PChar(SI), PChar (SI));
SI := 'Привет, ' + SI;
CharToOem(PChar(SI), S);
Writeln(S);
Readln;
end.
Приложение выводит пользователю приглашение: «Привет! Введите свое имя:». Если пользователь в ответ вводит имя, например, «Иванов», то приложение затем печатает текст «Привет, Иванов» и ждет, пока пользователь нажмет клавишу Enter.
Если бы приглашение пользователю выводилось простым оператором:
Writeln('Привет! Введите свое имя:’);
то пользователь увидел бы на экране абракадабру, в которой смог бы узнать только восклицательный знак и двоеточие. Это связано с тем, что консольное приложение работает в окне DOS, в котором символы кириллицы должны задаваться в кодировке MS DOS. Поэтому первый оператор приведенного выше кода переводит функцией CharToOem текст приглашения в эту кодировку. Далее обычной функцией Writeln этот текст выводится на экран. Функция Readln читает введенный пользователем ответ в строку S1.
...
Читать всю статью»