- Код: Выделить всё
uses crt;
var a:string;
c:char;
begin
a:='Проверка';
c:='ш';
writeln(a);
writeln(c);
end.
И получаем иероглифы.
Убираем модуль crt - всё отображается нормально.
Такая конструкция:
- Код: Выделить всё
{$codepage CP866}
uses crt,windows;
type
CPString = type AnsiString(866);
var a:CPString;
b:String
Отображает правильно переменную a, но не b или константы. При этом от значение AnsiString (хоть 866, хоть 1251) ничего не зависит. Использование SetConsoleOutputCP(866); (в модуле Windows) тоже ничего не даёт. Как и использование DefaultSystemCodePage.
Вообще проблема кроется в том, что консоль (и, соотвественно, редактор и кодировка констант в нём) использует кодировку 866, но при выводе идёт конвертирование в кодировку 1251. Причём это поведение изменяется при подключении модуля crt. Без него всё отображается "как есть". Есть способы обойти такую конвертацию?